1 python lambda dataframe python-3.x pandas
大家好我有一个像下面的df: -
df = pd.DataFrame.from_records([
{'0':'a:1','1':'b:2','2':'c:abc' },
{'0':'a:2','1':'b:5','2':'c:afbc'}
])
Run Code Online (Sandbox Code Playgroud)
我想把它转换成如下的df: -
我想用值重命名列索引,列中before :的值应该是任何值after :
到目前为止,我正在努力,首先重命名,然后从开头删除字符: -
dff.rename(columns={'0': 'a', '1': 'b', '2': 'c',}, inplace=True)
dff['a'] = dff['a'].map(lambda x: str(x)[2:])
dff['b'] = dff['b'].map(lambda x: str(x)[2:])
dff['c'] = dff['c'].map(lambda x: str(x)[2:])
Run Code Online (Sandbox Code Playgroud)
我想要一些帮助,如果有任何一个衬垫或lambda功能,我可以使用,因为我有超过20列.
PS - 原始数据帧中的0,1,2是列索引.只是为了演示我已经将它们用作列名.
pd.DataFrame([dict(x.split(':') for x in r) for r in df.values])
a b c
0 1 2 abc
1 2 5 afbc
Run Code Online (Sandbox Code Playgroud)
pd.DataFrame([*df.apply(lambda r: dict(r.str.split(':').values), 1)])
Run Code Online (Sandbox Code Playgroud)
回应OP的评论
当列名称多于一个字符aa或类似时间时,代码不起作用.其唯一workign当列名就好了,B,C,不与AA,BBBB,CCCCCC - ak333
考虑数据帧
df = pd.DataFrame([
{'0': 'aa:1', '1': 'bbb:2', '2': 'cccc:abc'},
{'0': 'aa:2', '1': 'bbb:5', '2': 'cccc:afbc'}
])
df
0 1 2
0 aa:1 bbb:2 cccc:abc
1 aa:2 bbb:5 cccc:afbc
Run Code Online (Sandbox Code Playgroud)
相同的解决方案导致
pd.DataFrame([dict(x.split(':') for x in r) for r in df.values])
aa bbb cccc
0 1 2 abc
1 2 5 afbc
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
118 次 |
| 最近记录: |