Skip to main content
 首页 » 编程设计

python之用特殊字符过滤 df

2025年05月04日8qlqwjy

大家好,我有一个像下面这样的 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