Python Pandas 混合类型警告 - “dtype”保留数据?

时间:2021-07-20 12:53:48

标签: python pandas dataframe

我有这段代码给出了这个警告:

/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. low_memory = 错误
  2. 转化者

#1 的问题在于它只是使警告静音,但不能解决根本问题(如果我错了,请纠正我)。

#2 的问题是转换器可能会做我们不喜欢的事情。有人说它们也效率低下,但我不知道。

我想出了一个更简单的解决方案:

  • 找出有问题的列的一般数据类型是什么
  • 在读取数据时传递 dtype 选项。

例如在我的情况下,有问题的列中的大多数元素都应该是字符串,因此我已经通过了:

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 值会发生什么变化?

1 个答案:

答案 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
...
相关问题