首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python -数据清理

Python -数据清理
EN

Stack Overflow用户
提问于 2018-10-10 19:34:58
回答 3查看 319关注 0票数 3

我有一个数据帧,它有一个形状(42538, 145),其中有超过50列,其中所有行都有一个NaN值。

我想删除这些列,而不是在df.drop中指定每个列的名称。

EN

回答 3

Stack Overflow用户

发布于 2018-10-10 21:52:27

您可能希望从df.notnull开始,以获取所有非NaNs的位置。

然后,您可以对结果使用df.any,并将axis设置为0,以检查所有列是否包含not- all -NaNness。

生成的布尔序列可用于索引您的列:Pandas Select DataFrame columns using boolean。有几个不同的选项:

代码语言:javascript
复制
df = df.iloc[:, df.notnull().any(axis=0).values]

代码语言:javascript
复制
sel = df.notnull().any(axis=0)
df = df[sel.index[sel]]
票数 1
EN

Stack Overflow用户

发布于 2018-10-10 21:58:49

您可以在axis=1上使用pd.DataFrame.dropna

代码语言:javascript
复制
df = pd.DataFrame({'A': [1, 2, 3], 'B': [np.nan]*3,
                   'C': [4, 5, 6], 'D': [np.nan]*3})

df_new = df.dropna(axis=1)

print(df_new)

   A  C
0  1  4
1  2  5
2  3  6
票数 1
EN

Stack Overflow用户

发布于 2021-07-02 16:48:19

试试这个:

代码语言:javascript
复制
tmp_col = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21]
df1.columns = tmp_col

df2 = df1[(df1[2] == 'RO En') | (df1[2] == 'RO En Adj')]
df2[['bp1','bp2']] = df2[6].str.split('-',expand=True)
df2[['mn1','mn2']] = df2[11].str.split(' ',expand=True)

df2['FN'] = df2[10] + ' ' + df2[11]


df2.loc[df2[2] == 'RO ', 'RT'] = ''
df2.loc[df2[2] == 'RO ', ''] = ''
df2.loc[df2[2] == 'RO ', ''] = df2['bp1']
df2.loc[df2[2] == 'RO ', ''] = df2[12]


df3 = df2[df2[8].str.contains('')]
df4 = df2[df2[8].str.contains(')]

print(df3,df4)

pm_col = []

df3 = df3[[10,11,'BP',16,15,15,17,15,'RT',14,21,19,'FN','mn2']]

df3.columns = pm_col

df4 = df4[[10,11,'BP',16,15,15,17,15,'RT',14,21,19,'FN','mn2']]
df4.columns = pm_col
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52739323

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档