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

时间:2020-07-02 07:55:28

标签: python pandas

运行SQL查询后,我得到一个数据框,其中的一列看起来像这样:

d = {'values': ['2,3,2,2', '2,3,5', '2', '3,4,2,2,2']}
df = pd.DataFrame(data=d)

我需要做的是将每个字符串变成数字列表:

d = {'values': [[2, 3, 2, 2], [2, 3, 5], [2], [3, 4, 2, 2, 2]]}

有没有一种Python方式来做到这一点?

4 个答案:

答案 0 :(得分:3)

这是使用pd.evalexplode的另一种方式

注释中的Jezrael帽子提示(用于评估线程)和cs95帽子提示(用于pd.Eval提示),请阅读:

Why using eval is bad practice

df['values_agg'] = df['values'].map(pd.eval)

print(df)

      values       values_agg
0    2,3,2,2     [2, 3, 2, 2]
1      2,3,5        [2, 3, 5]
2          2              [2]
3  3,4,2,2,2  [3, 4, 2, 2, 2]

或以更详细的方式避免评估。

df['values'].str.split(',').explode().astype(int).groupby(level=0).agg(list)

答案 1 :(得分:2)

使用pandas.Series.str.findall

df["values"] = df["values"].str.findall("\d+")
d2 = df.to_dict("list")
print(d2)

输出:

{'values': [['2', '3', '2', '2'], 
            ['2', '3', '5'], 
            ['2'], 
            ['3', '4', '2', '2', '2']]}

答案 2 :(得分:2)

由于将转换值转换为整数后需要数字:

df['values'] = df['values'].apply(lambda x: [int(y) for y in x.split(',')])
print (df)
            values
0     [2, 3, 2, 2]
1        [2, 3, 5]
2              [2]
3  [3, 4, 2, 2, 2]


print (df.to_dict("l"))
{'values': [[2, 3, 2, 2], [2, 3, 5], [2], [3, 4, 2, 2, 2]]}

对于数字的字符串表示法更简单,请仅使用Series.str.split

df['values'] = df['values'].str.split(',')
print (df.to_dict("l"))
{'values': [['2', '3', '2', '2'], ['2', '3', '5'], ['2'], ['3', '4', '2', '2', '2']]}

答案 3 :(得分:1)

您可以使用列表理解功能:

d = {'values': [list(map(int, x.split(','))) for x in df['values']]}

[出]

{'values': [[2, 3, 2, 2], [2, 3, 5], [2], [3, 4, 2, 2, 2]]}