Python pandas:将列转换为字符串?

时间:2017-06-07 12:59:51

标签: python pandas

我有一些专栏:

0                                            ['XS', '2X']
1                                      ['A2', '2X', '8W']
2                                                  ['2X']
3                    ['A2', 'FR', 'XS', '8W', '8E', '2X']
4                    ['A5', 'FR', 'XS', 'QF', '2X', '23']
5                                      ['XS', '2X', 'MF']
6                                                    None

我正在尝试迭代。它循环遍历列并获得类型:

for item in data1['business_types']:
    print(type(item))

它表明类型是str

类型
<class 'str'>
<class 'str'>
<class 'str'>
<class 'str'>
<class 'str'>
<class 'str'>
<class 'NoneType'>

我想将此列中的对象转换为可以迭代的列表对象。

1 个答案:

答案 0 :(得分:2)

我认为您需要ast.literal_eval fillna才能将None替换为[]

data1['business_types'] = data1['business_types'].fillna('[]').apply(ast.literal_eval)
print (data1)
             business_types
0                  [XS, 2X]
1              [A2, 2X, 8W]
2                      [2X]
3  [A2, FR, XS, 8W, 8E, 2X]
4  [A5, FR, XS, QF, 2X, 23]
5              [XS, 2X, MF]
6                        []

如果需要NoneNaN s):

def f(x):
    try:
        return ast.literal_eval(x)
    except ValueError:
        return x

import ast

data1['business_types'] = data1['business_types'].apply(f)
print (data1)
             business_types
0                  [XS, 2X]
1              [A2, 2X, 8W]
2                      [2X]
3  [A2, FR, XS, 8W, 8E, 2X]
4  [A5, FR, XS, QF, 2X, 23]
5              [XS, 2X, MF]
6                       NaN

for item in data1['business_types']:
    print(type(item))

<class 'list'>
<class 'list'>
<class 'list'>
<class 'list'>
<class 'list'>
<class 'list'>
<class 'float'>