Pandas:将列转换为字符串不起作用

时间:2017-03-08 13:24:19

标签: python pandas

我有一个数据框resultstatsDF

resultstatsDF = DataFrame({'a': [1,2,3,4,5]})
resultstatsDF['file'] = 'asdf'
resultstatsDF.dtypes
a        int64
file    object
dtype: object

我希望将objectfile转换为字符串:

我试过

resultstatsDF = resultstatsDF.astype({'file': str})
resultstatsDF['file'] = resultstatsDF['file'].astype(str)
resultstatsDF['file'] = resultstatsDF['file'].to_string
resultstatsDF['file'] = resultstatsDF.file.apply(str)
resultstatsDF['file'] = resultstatsDF['file'].apply(str)

但无论我做什么,当我用

检查时
resultstatsDF.dtypes

file保持为tpye object

1 个答案:

答案 0 :(得分:3)

<{1}} dtypestringdict始终为list,对于测试object,需要选择一些列值,例如iat

type

样品:

type(resultstatsDF['file'].iat[0])

样品:

resultstatsDF = pd.DataFrame({'file':['a','d','f']})
print (resultstatsDF)
  file
0    a
1    d
2    f

print (type(resultstatsDF['file'].iloc[0]))
<class 'str'>

print (resultstatsDF['file'].apply(type))
0    <class 'str'>
1    <class 'str'>
2    <class 'str'>
Name: file, dtype: object

所有值都具有相同的dtypes

df = pd.DataFrame({'strings':['a','d','f'],
                   'dicts':[{'a':4}, {'c':8}, {'e':9}],
                   'lists':[[4,8],[7,8],[3]],
                   'tuples':[(4,8),(7,8),(3,)],
                   'sets':[set([1,8]), set([7,3]), set([0,1])] })

print (df)
      dicts   lists    sets strings  tuples
0  {'a': 4}  [4, 8]  {8, 1}       a  (4, 8)
1  {'c': 8}  [7, 8]  {3, 7}       d  (7, 8)
2  {'e': 9}     [3]  {0, 1}       f    (3,)

但是print (df.dtypes) dicts object lists object sets object strings object tuples object dtype: object 是不同的,如果需要通过循环检查:

type

或列的第一个值:

for col in df:
    print (df[col].apply(type))

0    <class 'dict'>
1    <class 'dict'>
2    <class 'dict'>
Name: dicts, dtype: object
0    <class 'list'>
1    <class 'list'>
2    <class 'list'>
Name: lists, dtype: object
0    <class 'set'>
1    <class 'set'>
2    <class 'set'>
Name: sets, dtype: object
0    <class 'str'>
1    <class 'str'>
2    <class 'str'>
Name: strings, dtype: object
0    <class 'tuple'>
1    <class 'tuple'>
2    <class 'tuple'>
Name: tuples, dtype: object

如果可能,boolean indexing混合列(然后可以破坏一些pandas功能)可以按print (type(df['strings'].iat[0])) <class 'str'> print (type(df['dicts'].iat[0])) <class 'dict'> print (type(df['lists'].iat[0])) <class 'list'> print (type(df['tuples'].iat[0])) <class 'tuple'> print (type(df['sets'].iat[0])) <class 'set'> 过滤:

type
df = pd.DataFrame({'mixed':['3', 5, 9,'2']})
print (df)
  mixed
0     3
1     5
2     9
3     2

print (df.dtypes)
mixed    object
dtype: object