将float64 / int64列转换为具有float / int的列,作为pandas dataframe中的类型

时间:2017-11-09 16:19:00

标签: python pandas types stata

我想将我的pandas数据框保存为Stata文件,并且使用int64float64类型的列似乎存在问题,因此需要将其转换为标准Python类型{{1 }和int。我已经搜索了很多,但没有找到解决我问题的方法,因为没有解决方案对我有用。

我尝试过使用类似的东西:

float

我也试过astype。列的类型始终保持不变。

1 个答案:

答案 0 :(得分:1)

请参阅IO section of the docs

  

Stata数据文件支持的数据类型有限; 只有244个或更少字符的字符串,int8,int16,int32,float32和float64可以存储在.dta文件中。此外,Stata保留某些值来表示缺失的数据。在Stata中为特定数据类型导出超出允许范围的非缺失值将重新键入下一个更大的变量。例如,在Stata中,int8值被限制在介于-127和100之间,因此值大于100的变量将触发转换为int16。浮点数据类型中的nan值存储为基本缺失数据类型(。在Stata中)。

但是,熊猫会尽力克服其中一些限制并为您转换:

  

Stata编写器通过强制转换为可以表示数据的最小支持类型,优雅地处理其他数据类型,包括int64,bool,uint8,uint16,uint32。例如,如果所有值都小于100(Stata中非缺失的int8数据的上限),则将类型为uint8的数据强制转换为int8,或者,如果值超出此范围,则变量将转换为INT16。

也就是说,您的专栏似乎并不满足这些条件。

我会尝试手动将其转换为dta支持的内容,如int32(假设它是' s int):

df["speech_main_wordspersentcount_wc"].astype(np.int32)
df["speech_main_wordspersentcount_wc"] = df["speech_main_wordspersentcount_wc"].astype(np.int32)