【问题标题】:Python/Pandas - Writing empty cells to a csv file (instead of zeros)Python/Pandas - 将空单元格写入 csv 文件(而不是零)
【发布时间】:2020-02-20 11:04:39
【问题描述】:

在 Windows 10 上运行 Python 3.8.1,64 位。

我有一个包含两列的 csv 文件。第一列的每一行都没有数值(=单元格之间的空单元格有值),第二列的每一行都有数值。

column_1 column_2
         200
13       201
         202
         203
         204
         205
129      206
16       207
         208

我用 Pandas 读取了 csv 文件(如上所示):

df = pd.read_csv("old.csv")

我对 Pandas 数据框进行了修改,并使用 Pandas 写入了一个没有索引列的新 csv 文件。

df.to_csv("new.csv", sep=',', encoding='utf-8', index=False)

结果是一个 csv 文件,其中原始空单元格用零代替。

column_1,column_2
0,200
13,201
0,202
0,203
0,204
0,205
129,206
16,207
0,208

我的问题:如何修改我的脚本以在 csv 文件中写入空单元格而不是零 (0)(即 column_2 值为 200、202、203、204、205 和 208 的行)?

【问题讨论】:

  • I make modifications to the Pandas dataframe 是否将缺失值替换为 0 ?因为熊猫只写0如果存在,如果缺失值不写值(所以获取最后一个值,208
  • @jezrael 我将每个空值替换为“”(空字符串),然后打印 df.head(50) 并 它正确显示了带有空单元格的数据框。 之后,我将数据帧写入 csv 并出现零,这是我不想要的。

标签: python python-3.x pandas csv


【解决方案1】:

您可以通过Series.mask0 设置为缺失值,对于整数,将输出转换为Int64,在pandas 0.24+ 中工作:

df = pd.DataFrame({'column_1': [0, 13, 0, 0, 0, 0, 129, 16, 0],
                   'column_2': [200, 201, 202, 203, 204, 205, 206, 207, 208]})
print (df)
   column_1  column_2
0         0       200
1        13       201
2         0       202
3         0       203
4         0       204
5         0       205
6       129       206
7        16       207
8         0       208

df['column_1'] = df['column_1'].mask(df['column_1'].eq(0)).astype('Int64')
print (df)
   column_1  column_2
0       NaN       200
1        13       201
2       NaN       202
3       NaN       203
4       NaN       204
5       NaN       205
6       129       206
7        16       207
8       NaN       208

df.to_csv("new.csv", sep=',', encoding='utf-8', index=False)

column_1,column_2
,200
13,201
,202
,203
,204
,205
129,206
16,207
,208

另一个想法是替换空字符串:

df['column_1'] = df['column_1'].mask(df['column_1'].eq(0), '')
print (df)
  column_1  column_2
0                200
1       13       201
2                202
3                203
4                204
5                205
6      129       206
7       16       207
8                208

df.to_csv("new.csv", sep=',', encoding='utf-8', index=False)

column_1,column_2
,200
13,201
,202
,203
,204
,205
129,206
16,207
,208

【讨论】:

  • 我想将 空字符串 设置为缺失值,而不是零。你的建议可以吗?
  • @jeppoo1 - 在我的解决方案中将0 值转换为NaNs,所以如果写入文件得到空字符串,你不工作吗?
  • @jeppoo1 - 添加了示例数据,我工作得很好。
  • 谢谢!您的示例代码非常好。我只是再次注意到,Excel 没有按预期工作,它会将零添加到空单元格... 如果我在记事本或记事本++ 中打开 csv,则会出现预期的空单元格。 所以我相信我最初的解决方案也有效,我只是被 Excel 分心了。很烦,谢谢微软!
猜你喜欢
  • 2013-01-11
  • 1970-01-01
  • 2023-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-17
相关资源
最近更新 更多