nat*_*002 14 python dataframe pandas
我有一个名为data的pandas数据框,我想删除任何列中包含字符串的所有行.例如,下面我们看到'gdp'列在索引3处有一个字符串,在索引1处有'cap'.
data =
y gdp cap
0 1 2 5
1 2 3 ab
2 8 7 2
3 3 bc 7
4 6 7 7
5 4 8 3
...
Run Code Online (Sandbox Code Playgroud)
我一直在尝试使用类似这样的脚本,因为我不会提前知道exp_list中包含的内容.不幸的是,"data.var_name"抛出了这个错误:'DataFrame'对象没有属性'var_name'.我也不知道字符串会提前是什么,所以有什么方法可以概括一下呢?
exp_list = ['gdp', 'cap']
for var_name in exp_list:
data = data[data.var_name != 'ab']
Run Code Online (Sandbox Code Playgroud)
Aco*_*rbe 13
您可以应用一个函数来逐行测试您DataFrame是否存在字符串,例如,这df就是您的DataFrame
rows_with_strings = df.apply(
lambda row :
any([ isinstance(e, basestring) for e in row ])
, axis=1)
Run Code Online (Sandbox Code Playgroud)
这将为您的DataFrame生成一个掩码,指示哪些行包含至少一个字符串.因此,您可以通过相反的掩码选择没有字符串的行
df_with_no_strings = df[~rows_with_strings]
Run Code Online (Sandbox Code Playgroud)
.
例:
a = [[1,2],['a',2], [3,4], [7,'d']]
df = pd.DataFrame(a,columns = ['a','b'])
df
a b
0 1 2
1 a 2
2 3 4
3 7 d
select = df.apply(lambda r : any([isinstance(e, basestring) for e in r ]),axis=1)
df[~select]
a b
0 1 2
2 3 4
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8776 次 |
| 最近记录: |