熊猫数据框列有带逗号的字符串如何将其转换为列表[关闭]

Posted

技术标签:

【中文标题】熊猫数据框列有带逗号的字符串如何将其转换为列表[关闭]【英文标题】:pandas dataframe column has string with commas how to convert it to a list [closed] 【发布时间】:2017-10-06 19:32:29 【问题描述】:

数据框中的列具有值'abc,def,ghi'。我想做一个这样的数组:['abc','def','ghi']

【问题讨论】:

这给出了更详细的答案***.com/questions/40784200/… 【参考方案1】:

考虑数据框df,其中包含用逗号分隔的随机字符串数。

np.random.seed([3,1415])
k = 10
df = pd.DataFrame(
    np.random.choice(list('ABCD,'), (k, 20))
).sum(1).str.strip(',').str.replace(',+', ',').to_frame('col1')
df

                   col1
0  ADCDCCDCDACAA,ACCA,B
1      DC,DDD,DBDA,CCAC
2    A,B,CCAC,DB,C,CD,D
3   ADDBAA,DA,BD,C,AACA
4   DADBB,D,DBD,ADCAADB
5  CBCBA,CA,B,AA,CDCBDB
6  BD,D,DDB,AC,B,C,ABBA
7  C,CABBBADCD,DBCC,ACD
8    CC,A,BCAAAACBBA,BD
9  AC,A,ADBBD,BDCCDDABD

我喜欢使用numpys 功能进行拆分

df.assign(col1=np.core.defchararray.split(df.col1.values.astype(str), ','))

                           col1
0      [ADCDCCDCDACAA, ACCA, B]
1         [DC, DDD, DBDA, CCAC]
2    [A, B, CCAC, DB, C, CD, D]
3     [ADDBAA, DA, BD, C, AACA]
4      [DADBB, D, DBD, ADCAADB]
5    [CBCBA, CA, B, AA, CDCBDB]
6  [BD, D, DDB, AC, B, C, ABBA]
7     [C, CABBBADCD, DBCC, ACD]
8       [CC, A, BCAAAACBBA, BD]
9     [AC, A, ADBBD, BDCCDDABD]

快速处理小数据

%timeit df.assign(col1=np.core.defchararray.split(df.col1.values.astype(str), ','))
1000 loops, best of 3: 204 µs per loop

%timeit df.assign(col1=df['col1'].str.split(','))
1000 loops, best of 3: 327 µs per loop

%timeit df.assign(col1=[x.split(',') for x in df['col1'].values.tolist()])
1000 loops, best of 3: 210 µs per loop

对于大数据来说没有那么快a

np.random.seed([3,1415])
k = 10000
df = pd.DataFrame(
    np.random.choice(list('ABCD,'), (k, 100))
).sum(1).str.strip(',').str.replace(',+', ',').to_frame('col1')

%timeit df.assign(col1=np.core.defchararray.split(df.col1.values.astype(str), ','))
10 loops, best of 3: 19.6 ms per loop

%timeit df.assign(col1=df['col1'].str.split(','))
100 loops, best of 3: 13.5 ms per loop

%timeit df.assign(col1=[x.split(',') for x in df['col1'].values.tolist()])
100 loops, best of 3: 11.5 ms per loop

【讨论】:

@jezrael 非常快!!【参考方案2】:

使用str.split:

df['col'] = df['col'].str.split(',')

示例:

df = pd.DataFrame('col':['abc,def,ghi','abc,def,ghi'])
df['col'] = df['col'].str.split(',')
print (df)
               col
0  [abc, def, ghi]
1  [abc, def, ghi]

print (df.loc[0, 'col'])
['abc', 'def', 'ghi']

print (type(df.loc[0, 'col']))
<class 'list'>

如果从来没有 NaN 值使用列表理解:

df['col'] = [x.split(',') for x in df['col'].values.tolist()]
print (df)
               col
0  [abc, def, ghi]
1  [abc, def, ghi]

【讨论】:

但我想要这样 ['abc','def','ghi'] 嗯,你需要双 ' 吗?因为如果是字符串,默认是' 它对我来说很好用。非常感谢。 @Aravindh 如果您觉得它有帮助,请不要忘记接受这个答案并投票。

以上是关于熊猫数据框列有带逗号的字符串如何将其转换为列表[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何将多索引列转换为熊猫数据框的单索引列?

如何从熊猫数据框中的列中删除字符串值

将逗号分隔字符串的熊猫列转换为虚拟变量

比较熊猫数据框列中的值时出现类型错误

熊猫 datetime64 到字符串

熊猫数据框映射到新的对象列表[重复]