将列名从int转换为pandas中的string

时间:2016-07-25 20:45:02

标签: python pandas

我有一个带有混合列名的pandas数据框:

1,2,3,4,5,' Class'

当我将此数据帧保存到h5file时,它表示由于混合类型,性能会受到影响。如何在pandas中将整数转换为字符串?

3 个答案:

答案 0 :(得分:28)

您只需使用df.columns = df.columns.astype(str)

即可
In [26]: df = pd.DataFrame(np.random.random((3,6)), columns=[1,2,3,4,5,'Class'])

In [27]: df
Out[27]: 
          1         2         3         4         5     Class
0  0.773423  0.865091  0.614956  0.219458  0.837748  0.862177
1  0.544805  0.535341  0.323215  0.929041  0.042705  0.759294
2  0.215638  0.251063  0.648350  0.353999  0.986773  0.483313

In [28]: df.columns.map(type)
Out[28]: 
array([<class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>,
       <class 'int'>, <class 'str'>], dtype=object)

In [29]: df.to_hdf("out.h5", "d1")
C:\Anaconda3\lib\site-packages\pandas\io\pytables.py:260: PerformanceWarning: 
your performance may suffer as PyTables will pickle object types that it cannot
map directly to c-types [inferred_type->mixed-integer,key->axis0] [items->None]

  f(store)
C:\Anaconda3\lib\site-packages\pandas\io\pytables.py:260: PerformanceWarning: 
your performance may suffer as PyTables will pickle object types that it cannot
map directly to c-types [inferred_type->mixed-integer,key->block0_items] [items->None]

  f(store)

In [30]: df.columns = df.columns.astype(str)

In [31]: df.columns.map(type)
Out[31]: 
array([<class 'str'>, <class 'str'>, <class 'str'>, <class 'str'>,
       <class 'str'>, <class 'str'>], dtype=object)

In [32]: df.to_hdf("out.h5", "d1")

In [33]:

答案 1 :(得分:1)

您只需使用df.columns = df.columns.map(str)

即可

DSM的第一个回答df.columns = df.columns.astype(str)对我的数据框没有用处。 (我得到TypeError:将dtype设置为除float64以外的任何东西或不支持对象)

答案 2 :(得分:0)

你总是可以像这篇文章所说的那样使用数字重命名所有列 [https://stackoverflow.com/a/44292845/11165920][1] 然后像这样选择数字列标签:

   df[1]

而不是使用通常的字符串选择:

df.loc[:, '1']

而且您也不会有混合类型。 [1]:https://stackoverflow.com/a/44292845/11165920