我有一个CSV文件,其列是单词的频率计数,而行是时间段。我想为每一列求和。然后,我想写入总和大于或等于30的CSV文件,列和行值,因此删除总和小于30的列。
只需学习python和pandas。我知道这是一个简单的问题,但是我的知识才是这个水平。非常感谢您的帮助。
我可以读取CSV文件并计算列总和。
df = pd.read_csv('data.csv')
Except of data file containing 3,874 columns and 100 rows
df.sum(axis = 0, skipna = True)
我坚持如何创建输出文件,使其看起来像原始文件,但不再包含总和小于30的列。
我坚持如何将总和大于或等于30的每一列的每一行写入CSV文件。输出文件的布局将与输入文件的布局相同。总和将不包含在输出中。
非常感谢您的帮助。
因此,下面的链接显示了一个包含100行和3857列的文件的摘录:
答案 0 :(得分:0)
最简单的两步操作:
1。将DataFrame过滤为仅要保存的列
df_to_save = df.loc[:, (df.sum(axis=0, skipna=True) >= 30)]
.loc
用于根据标签或条件选择行/列;语法为.loc[rows, columns]
,所以:
的意思是“占据所有行”,然后第二部分是我们列的条件-我已经采用了您在问题中给出的总和大于或等于30。
2。将过滤后的DataFrame保存为CSV
df_to_save.to_csv('path/to/write_file.csv', header=True, index=False)
只需将文件路径作为第一个参数即可。 header=True
表示表中的标题标签将写回到文件中,index=False
表示在CSV中读取时自动创建的带编号的熊猫标签行不会包含在导出中。
在此处查看此答案:How to delete a column in pandas dataframe based on a condition?。请注意,您的问题的解决方案在isnull()
之前不需要sum()
,因为这是他们的问题,用于计算NaN
的值。