我有这段代码给出了这个警告:
/opt/conda/lib/python3.7/site-packages/IPython/core/interactiveshell.py:3063: DtypeWarning:
Columns (21,22,23) have mixed types.Specify dtype option on import or set low_memory=False
我在 google 和 stackoverflow 上都进行了搜索,人们似乎给出了两种解决方案:
#1 的问题在于它只是使警告静音,但不能解决根本问题(如果我错了,请纠正我)。
#2 的问题是转换器可能会做我们不喜欢的事情。有人说它们也效率低下,但我不知道。
我想出了一个更简单的解决方案:
例如在我的情况下,有问题的列中的大多数元素都应该是字符串,因此我已经通过了:
mixed_cols = {'Col_21':str, 'Col_22':str, 'Col_23':str }
df = pd.read_csv('police_killings_MPV.csv', dtype=mixed_cols)
我不再收到警告,但这会保留数据吗?由于我无法手动检查三列中每列中的 6000 个值,这是否会将任何整数或浮点数转换为字符串而不修改它(3.09 -->“3.09”)? NaN 值会发生什么变化?
答案 0 :(得分:1)
你有不同的选择来阅读你的文件
>>> %cat data.csv
Col_21
12
242.24
-232e-3
empty
.90832
案例 1:让 Pandas 确定数据类型
# df = pd.read_csv('data.csv')
>>> df
Col_21
0 12
1 242.24
2 -232e-3
3 empty
4 .90832
>>> df.info()
...
0 Col_21 5 non-null object
...
案例 2:添加字符串识别 NaN 值并让 Pandas 确定数据类型
# df = pd.read_csv('data.csv', na_values='empty')
>>> df
Col_21
0 12.00000
1 242.24000
2 -0.23200
3 NaN
4 0.90832
>>> df.info()
...
0 Col_21 4 non-null float64
...
案例 3:添加字符串以识别 NaN 值但将数据保留为纯文本
# df = pd.read_csv('data.csv', na_values='empty', dtype={'Col_21': str})
>>> df
Col_21
0 12
1 242.24
2 -232e-3
3 NaN
4 .90832
>>> df.info()
...
0 Col_21 4 non-null object
...