在 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 的行)?
最佳答案
您可以通过Series.mask
将0
设置为缺失值,对于整数,将输出转换为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
关于Python/Pandas - 将空单元格写入 csv 文件(而不是零),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60318501/