大家好,我有一个像下面这样的 df :-
df = pd.DataFrame.from_records([
{'0':'a:1','1':'b:2','2':'c:abc' },
{'0':'a:2','1':'b:5','2':'c:afbc'}
])
我想把它转换成如下的 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:])
如果有任何一种线性函数或 lambda 函数我可以使用,我需要一些帮助,因为我有超过 20 列。
P.S - 原始数据框中的 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
备选
pd.DataFrame([*df.apply(lambda r: dict(r.str.split(':').values), 1)])
回应OP的评论
the code doesnt work when the column names are more than one characters say aa or time like that. its only workign when the column names are like a, b ,c and not with 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
同样的解决方案导致
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
