筛选出所有字符串类型的字段, 并将其保存到.str_cols
时间: 2024-10-20 11:18:45 浏览: 13
在Pandas库中,Pandas DataFrame是一个二维的大小可变的表格型数据结构,它包含不同类型的数据,包括数值、字符串等。如果你想筛选出DataFrame中所有的字符串类型(string-like)字段,并将它们的列名保存在一个新的属性`.str_cols`,可以按照以下步骤操作:
```python
import pandas as pd
# 假设df是你的DataFrame
# 判断每列是否为字符串类型
str_cols = df.select_dtypes(include=['object']).columns.tolist()
# 如果你希望创建一个新的DataFrame只包含这些字符串列,可以用以下方式:
str_df = df[str_cols]
# 或者如果只想保存列名,但不创建新DF,可以使用以下:
df._str_cols = str_cols # 但这不是一个标准做法,可能会覆盖DataFrame内部的其他属性
print(str_cols)
```
这里,`select_dtypes(include=['object'])`会选择所有对象类型(即包括字符串和其他非数值类型),然后`columns.tolist()`将列名转换成列表形式。
相关问题
用julia解决筛选出所有字符串类型的字段, 并将其保存到.str_cols
在Julia语言中,如果你想要筛选出DataFrame中的所有字符串类型的字段,并将它们存储在一个名为`.str_cols`的新列,你可以使用Pandas-like语法,虽然Julia的标准库DataFrames并没有直接提供这样的功能,但你可以通过一些数据操作来实现类似的功能。首先,你需要导入`DataFrames`库:
```julia
using DataFrames
```
然后,可以创建一个函数来识别字符串列:
```julia
function get_string_columns(df::DataFrame)
# 创建一个空数组来存储字符串列名
str_cols = Any[]
# 遍历DataFrame的所有列
for col_name in names(df)
# 检查列的数据类型是否为String或Nullable{String}
if typeof(df[col_name][1]) == String || typeof(df[col_name][1]) == Nullable{String}
push!(str_cols, col_name) # 如果是字符串类型,添加到数组中
end
end
return str_cols
end
```
现在你可以使用这个函数来筛选DataFrame `df`:
```julia
str_cols = get_string_columns(df)
```
然后,如果你想将结果保存回DataFrame,你可以选择添加一个新的列,但原生DataFrame结构并不支持动态添加列。如果需要,你可以创建一个新的DataFrame只包含字符串列,例如:
```julia
string_df = DataFrame(col_name = str_cols)
```
详细解释一下以下这段代码:class DnnNework(nn.Module): def __init__(self, feature_columns, hidden_units, n_output,dnn_dropout=0.): super(DnnNework, self).__init__() self.sparse_feature_cols = feature_columns # embedding self.embed_layers = nn.ModuleDict({ 'embed_' + str(i): nn.Embedding(num_embeddings=feat['feat_num'], embedding_dim=feat['embed_dim']) for i, feat in enumerate(self.sparse_feature_cols) }) hidden_units.insert(0, len(self.sparse_feature_cols)*self.sparse_feature_cols[0]['embed_dim']) hidden_units.append(n_output) self.dnn_network = Dnn(hidden_units) def forward(self, x): sparse_inputs = x sparse_inputs = sparse_inputs.long() sparse_embeds = [self.embed_layers['embed_'+str(i)](sparse_inputs[:, i]) for i in range(sparse_inputs.shape[1])] sparse_embeds = torch.cat(sparse_embeds, axis=-1) dnn_input = sparse_embeds deep_out = self.dnn_network(dnn_input) deep_out = F.softmax(deep_out,dim=-1) return deep_out
这段代码定义了一个名为 DnnNetwork 的神经网络类,该类继承自 nn.Module 类。其构造函数有四个参数:feature_columns 表示特征列,hidden_units 表示隐藏层单元数,n_output 表示输出层单位数,dnn_dropout 表示 DNN 网络的 dropout 概率。
在构造函数中,首先调用父类 nn.Module 的构造函数。然后初始化 sparse_feature_cols 为传入的 feature_columns。接着,使用 nn.ModuleDict 类型的 embed_layers 成员变量来定义每个离散特征的 embedding 层。其中,num_embeddings 表示该特征的取值个数,embedding_dim 表示 embedding 的维度。这里使用了一个列表解析式来生成所有的 embedding 层。
接下来,将每个 embedding 的输出拼接成一个向量,作为 DNN 网络的输入。在 forward 函数中,将输入 x 中的每个离散特征的取值通过相应的 embedding 层得到其 embedding 向量,并将这些 embedding 向量拼接成一个向量作为 DNN 网络的输入。然后,将 DNN 网络的输出进行 softmax 归一化,作为最终的输出。
阅读全文