将熊猫DF列表转换为字符串

时间:2016-05-20 13:16:48

标签: python pandas

我有一个熊猫数据框。其中一列包含一个列表。我希望该列成为单个字符串。

例如,我的列表['一个','两个'三个']应该只是一个,两个,三个'

df['col'] = df['col'].astype(str).apply(lambda x: ', '.join(df['col'].astype(str)))

给了我['一,二,三],['四'五,'六'],其中第二个列表是从下一行开始。毋庸置疑,对于数百万行,这种跨行的连接不仅不正确,而且会破坏我的记忆。

4 个答案:

答案 0 :(得分:23)

在转换列表之前,您当然不应该转换为字符串。尝试:

df['col'].apply(', '.join)

另请注意,apply将函数应用于系列的元素,因此在lambda函数中使用df['col']可能不是您想要的。

编辑:感谢Yakym指出不需要lambda函数。

答案 1 :(得分:8)

当您使用colstr强制转换为astype时,您将获得python列表,括号和所有内容的字符串表示形式。您不需要直接apply join直接执行此操作:

import pandas as pd

df = pd.DataFrame({
    'A': [['a', 'b', 'c'], ['A', 'B', 'C']]
    })

# Out[8]: 
#            A
# 0  [a, b, c]
# 1  [A, B, C]

df['Joined'] = df.A.apply(', '.join)

#            A   Joined
# 0  [a, b, c]  a, b, c
# 1  [A, B, C]  A, B, C

答案 2 :(得分:6)

您可以使用astype(str)将列表转换为str,然后删除'[]个字符。使用@Yakim示例:

In [114]: df
Out[114]:
           A
0  [a, b, c]
1  [A, B, C]

In [115]: df.A.astype(str).str.replace('\[|\]|\'', '')
Out[115]:
0    a, b, c
1    A, B, C
Name: A, dtype: object

<强>时序

import pandas as pd
df = pd.DataFrame({'A': [['a', 'b', 'c'], ['A', 'B', 'C']]})
df = pd.concat([df]*1000)


In [2]: timeit df['A'].apply(', '.join)
292 µs ± 10.8 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

In [3]: timeit df['A'].str.join(', ')
368 µs ± 24.6 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

In [4]: timeit df['A'].apply(lambda x: ', '.join(x))
505 µs ± 5.74 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

In [5]: timeit df['A'].str.replace('\[|\]|\'', '')
2.43 ms ± 62.7 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

答案 3 :(得分:1)

Pandas为此提供了一种方法,Series.str.join