用Python填补CSV中的空点[英] Filling Null Spots in CSV in Python

本文是小编为大家收集整理的关于用Python填补CSV中的空点的处理方法,想解了用Python填补CSV中的空点的问题怎么解决?用Python填补CSV中的空点问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我正在解析一个 csv 文件来创建图表.我可以毫无问题地做到这一点,除了在一个案例中......每当 csv 文件中有一个空槽时.例如:

<块引用>

Col1 Col2 Col3 Col4 Col5
 45  34   23   98   18
 66      25   0
 18      52   56  100

文件的第 2 列和第 5 列中有两个空白条目.我想用 0 填充这些位置.我对 Python 还很陌生.如果 csv 中有一个空点,我想插入一个 0.因为有时我的 csv 文件中可能有空白,我收到错误 TypeError: unsupported operand type(s) for -: 'int' and 'str'.必须进入 csv 文件以检查是否存在空点并手动将其填充为零可能会很烦人,因此我想在脚本中执行此操作.这是我的代码:

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np


file_name = "myfile.csv"
df = pd.read_csv(file_name)
names = df['name'].values

x = np.arange(len(names))*2
w = 0.40

col2 = df.columns[1]
col3 = df.columns[2]
col4 = df.columns[3]
col5 = df.columns[4]

dif = df[col4] - df[col3]

colors = ['Red' if d < -5 else 'Blue' for d in dif]

plt.bar(x-w, df[col2].values, width=w*0.7, label=col2, color = "cyan")
plt.bar(x, df[col3].values, width=w*0.7, label=col3, color = "green")
plt.bar(x+w, df[col4].values, width=w*0.7, label=col4, color = colors)
plt.plot(x, df[col5].values, lw=2, label="Goal", color = "red")

plt.xticks(x, names, rotation='vertical')
plt.ylim([0,100])

plt.show()

注意:正如我上面提到的,我正在从 csv 文件中读取数据帧.

编辑:

我已将这一行添加到我的代码中:

df.replace(r'^\s*$', 0, regex=True)
#For testing purposes, I also added this:
print(df.replace(r'^\s*$', 0, regex=True))

我可以看到空槽现在被零填充,但我仍然收到 dif = df[col4] - df[col3] 的错误 TypeError: unsupported operand type(s) for -: 'str' and 'int'.是否可能将那些插入的 0 读取为字符串?我也尝试将 df[col3] 和 df[col4] 包装在 int() 中,但那里没有运气.它给出了错误TypeError: cannot convert the series to <class 'int'>.然后我尝试了 df[col4].astype(int) - df[col3].astype(int) 并得到了错误 ValueError: invalid literal for int() with base 10.

编辑 2:我刚刚添加了 print(df.dtypes) 行.出于某种原因,第四列(在这种情况下包含被替换的 0)被视为一个对象,而不是像其他列那样的 int64.

推荐答案

   import pandas as pd
   file_name = "myfile.csv"
   df = pd.read_csv(file_name)
   # a Pandas method that fills any NaN value with 0, you can change 0 to any value you 
   # want, you can use mean or median, etc
   df.fillna(0, inplace=True)

本文地址:https://www.itbaoku.cn/post/1728194.html