熊猫:为什么导入后csv列中的float数据有时变成对象?

时间:2019-02-13 10:52:07

标签: python pandas csv dataframe

我有2个csv文件,它们具有相同的列,但不同的数据。将它们导入熊猫后,其中一个的cost列的dtype是float,而另一个的object的dtype。

我发现一个similar question,在这种情况下,答案是“这是a bug in <=0.12(但在0.13中固定)”。

但是问题是:我的两个csv文件都具有类似的最小编号,1.000000e-02都不是blank value

(我在PyCharm2018.2上使用Python 3.7,Pandas 0.23.4)

# csv 1: before pd.to_numeric
count     174526
unique     84873
top         0.41
freq         505
Name: cost, dtype: object

# csv 1: after pd.to_numeric
count    1.745260e+05
mean     3.608746e+04
std      4.690326e+05
min      1.000000e-02
25%      1.040000e+01
50%      1.190400e+02
75%      1.433350e+03
max      5.400000e+07
Name: cost, dtype: float64

# csv 2: 
count    2.578860e+05
mean     1.588632e+04
std      3.295925e+05
min      1.000000e-02
25%      2.820000e+00
50%      2.109000e+01
75%      2.426200e+02
max      6.030000e+07
Name: cost, dtype: float64

换一种说法,如果我将代码分为两部分,那么 csv2 的一切都很好:

df = pd.read_csv('file_name.csv',low_memory=False)
df = df[df.Cloumn1 != 'Value1']
df['cost_T'] = df['cost'] / 1000
df.to_csv('new_file_name.csv', index=False)
"""
TypeError: unsupported operand type(s) for /: 'str' and 'int'
"""
df = pd.read_csv('file_name.csv',low_memory=False)
df = df[df.Cloumn1 != 'Value1']
df.to_csv('new_file_name.csv', index=False)

df = pd.read_csv('new_file_name.csv', low_memory=False)
df['cost_T'] = df['cost'] / 1000
df.to_csv('final_file_name.csv', index=False)
"""
everything is fine.
"""

如果有人有任何想法,请告诉我。

0 个答案:

没有答案