Lás*_*zló 6 python csv types type-conversion pandas
我有下面的代码来解析一些 csv 数据。关键是最后几行,其余的只是为了显示上下文。基本上,我的数据最后有三列,ID 变量 LopNr 和年份“无论如何”应该有整数,但我将整个 DataFrame 转换为整数以防万一。为什么在生成的 csv 文件中,LopNr 和年份列得到“.0”,而包含聚合数据的第三列实际上被转换为整数并且输出时没有“.0”?我本以为.astype(int)所有列都会有整数,并且我们导出到 csv 而不将它们转换回浮点数。
import iopro
from pandas import *
neuro = DataFrame()
for year in xrange(2005,2012):
for month in xrange(1,13):
if year == 2005 and month < 7:
continue
filename = 'Q:\\drugs\\lmed_' + str(year) + '_mon'+ str(month) +'.txt'
adapter = iopro.text_adapter(filename,parser='csv',field_names=True,output='dataframe',delimiter='\t')
monthly = adapter[['LopNr','ATC','TKOST']][:]
monthly['year']=year
neuro = neuro.append(monthly[(monthly.ATC.str.startswith('N')) & (~(monthly.TKOST.isnull()))])
neuro = neuro.groupby(['LopNr','year']).sum()
neuro = neuro.astype(int)
neuro.to_csv('Q:\\drugs\\annual_neuro_costs.csv')
Run Code Online (Sandbox Code Playgroud)
这可能是因为您的“LopNr”和“year”列具有空值。目前,pandas 不支持具有空值的整数列,而是将整个列上转换为浮点数。
编辑:
从版本 0.24.0 开始,Pandas 初步支持可为null 的整数数据类型。
默认情况下,如果缺少值,整数仍会转换为浮点数:
>> df = pd.DataFrame([[1, 2, None], [5, None, 7]])
>> print(df)
0 1 2
0 1 2.0 NaN
1 5 NaN 7.0
Run Code Online (Sandbox Code Playgroud)
然而,如果我们指定dtype="Int64",这种情况就不会再发生:
>> df = pd.DataFrame([[1, 2, None], [5, None, 7]], dtype="Int64")
>> print(df)
0 1 2
0 1 2 <NA>
1 5 <NA> 7
Run Code Online (Sandbox Code Playgroud)