pandas datafram中的拆分列

2024-06-01 00:36:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我想使用逗号分隔符将我的df中的ji列拆分为两列,这样可以消除ji值周围的括号。我试过各种方法,但总是出错。我想暂时避免使用lambda expression!还有别的主意吗?在

示例

      ji           length
0     (75.0, 5.0)  3283.458479
1     (96.0, 5.0)  1431.312901
2     (97.0, 5.0)  1364.592959
3    (247.0, 5.0)  3736.322308
4     (81.0, 7.0)  2655.910005
5     (93.0, 7.0)  1752.293687
6    (242.0, 7.0)   427.844417
7    (248.0, 7.0)  3725.823013
8    (254.0, 7.0)  2318.937332
9    (255.0, 7.0)  2292.673905
10   (242.0, 8.0)   145.811907
11   (254.0, 8.0)  2222.447786
12   (255.0, 8.0)  2196.184360
13   (248.0, 9.0)   441.222866
14   (253.0, 9.0)   853.095032
15   (256.0, 9.0)  2076.942682
16   (91.0, 10.0)  1743.310744
17   (93.0, 10.0)  1256.337420
18  (105.0, 10.0)   523.447658
19  (174.0, 10.0)  1530.617012
20  (176.0, 10.0)  1697.614009
21  (248.0, 10.0)   440.000463
22  (253.0, 10.0)   904.706003
23  (256.0, 10.0)  1991.662604
24  (258.0, 10.0)  1850.995862
25  (172.0, 11.0)  1301.179960
26  (174.0, 11.0)  1436.984094
27  (176.0, 11.0)  1695.954099
28  (179.0, 11.0)  1548.015013
29  (228.0, 11.0)  4640.928585
30  (242.0, 11.0)   169.617203
31  (251.0, 11.0)   784.921333
32  (253.0, 11.0)   983.118859
33  (255.0, 11.0)  1181.474433
34  (256.0, 11.0)  1303.398235

Tags: 方法lambda示例dflength括号主意逗号
3条回答

如果列ji-^{}列中的字符串用于提取,^{}和{a3}中的字符串为expand=True,则为DataFrame

print (type(df.loc[0, 'ji']))
<class 'str'>

df[['a','b']] = df.pop('ji').str.strip('()').str.split(', ', expand=True).astype(float)

或使用list comprehension如果没有丢失的值并且性能很重要:

^{pr2}$

如果元组然后创建元组的嵌套列表并传递给DataFrame构造函数:

print (type(df.loc[0, 'ji']))
<class 'tuple'>

df[['a','b']] = pd.DataFrame(df.pop('ji').values.tolist(), index=df.index)

编辑:

如果'ji'包含元组,则更简单:

df[['j', 'i']] = df.pop('ji').apply(pd.Series)

给予

^{pr2}$

也就是说,当'ji'列包含字符串时,我会在这里使用ast.literal_eval。在

>>> from ast import literal_eval
>>> def split_to_df(string): 
...:    return pd.Series(literal_eval(string)) 
>>>
>>> df[['val1', 'val2']] = df.pop('ji').apply(split_to_df)                                                                                                      
>>> df                                                                                                                                                   
        length   val1  val2
0  3283.458479   75.0   5.0
1  1431.312901   96.0   5.0
2  1364.592959   97.0   5.0
3  3736.322308  247.0   5.0
4  2655.910005   81.0   7.0

(使用pop的灵感来自耶兹雷尔的回答。)

您需要:

df['a'] = df['ji'].apply(lambda x: x[0])
df['b'] = df['ji'].apply(lambda x: x[1])

df.drop(['ji'], axis=1, inplace=True)

相关问题 更多 >