【问题标题】:Pandas: Delete rows with different encoding of 0s in python熊猫:在python中删除具有不同编码0的行
【发布时间】:2019-11-24 00:52:34
【问题描述】:

我计算了统计值并将它们写入 csv 文件。 nan 值被零替换。有些行只有零,有些行只有 0 和 0.0 值。如何删除这些行?根据所附图像行号 5 、 6(仅 0.0s)、9 和 11(0s 和 0.0s)需要被删除。

import pandas as pd
all_df = pd.read_csv('source.csv')
all_df.dropna(subset=df_all.columns.tolist()[1:], how='all', inplace=True)
all_df.fillna(0, inplace=True)
all_df.to_csv('outfile.csv', index=False)

【问题讨论】:

标签: python python-3.x pandas csv


【解决方案1】:

使用all_df[(all_df.T != 0).any()]all_df[(all_df != 0).any(axis=1)]

all_df = pd.DataFrame({'a':[0,0,0,1], 'b':[0,0,0,1]})
print all_df
   a  b
0  0  0
1  0  0
2  0  0
3  1  1
all_df = all_df[(all_df.T != 0).any()]
all_df
   a  b
3  1  1

编辑 1:查看数据后,解决方案是将所有数值列转换为浮点数,然后执行操作。此问题源于初始数据保存到 .csv 文件的方式。

all_df = pd.read_csv('/Users/me/Downloads/Test11.csv')

# do not select 'activity' column
df = all_df.loc[:, all_df.columns != 'activity']

# convert to float
df = df.astype(float)

# remove columns with all 0s
mask = (df != 0).any(axis=1)
df = df[mask]

#mask activity column
recover_lines_of_activity_column = all_df['activity'][mask]

# Final result
final_df = pd.concat([recover_lines_of_activity_column, df], axis = 1)    

输出:

【讨论】:

  • 谢谢。但是我应该在哪里添加那行。在我给出的代码中,我只需要添加 all_df[(all_df.T != 0).any()]?
  • 请注意,有 0.0 和或 0 的行(甚至在一行中)例如:第 9 行。我需要删除这些行
  • (all_df != 0).any(axis=1) 会更好(转置可能是一项昂贵的操作)
  • @IanS 不起作用。有所有 0.0 的行和 0.0 和 0 的行。我需要删除所有这些行。
  • 试试numpy.isclose
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-27
  • 2015-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-18
相关资源
最近更新 更多