遍历一列并用提取的字符串替换值[Pandas]

我有一个数据集,看起来像这样:

  A   B
1 aa  1234
2 ab  3456
3 bc  [1357, 2468]
4 cc  8901
...

我需要遍历B列,并将方括号([])中的所有值替换为这些方括号中的左四个数字,因此数据集将如下所示:

  A   B
1 aa  1234
2 ab  3456
3 bc  1357
4 cc  8901
...

我有以下代码

for item in df['B']:
if len(item) > 4:
    item_v = str(item[1:5])
    df['B'][item] = item_v 
    print(df['B'][item])

它打印出截断的值,但是,如果我检查df的头部,它仍然具有旧值:

   > df['B'].head()

   >  A   B
    1 aa  1234
    2 ab  3456
    3 bc  [1357, 2468]
    4 cc  8901
    ...

我究竟做错了什么?

解决方法:

最简单,最快的方法是使用Pandas str.get()函数并创建另一列以获得所需结果.

解决方案1
如果您在B中的值是整数[1234,3456,[1357,2468],8901],则第一个解决方案有效

df['C'] = df['B'].str.get(0).astype(float)
df.C.fillna(df['B'], inplace=True)
df['C'] = df.C.astype(int, inplace=True)

输出

A             B     C
0  aa          1234  1234
1  ab          3456  3456
2  bc  [1357, 2468]  1357
3  cc          8901  8901

然后,您可以删除不需要的列B.

解决方案#2
如果您在B中的值是字符串[‘1234′,’3456’,[‘1357′,’2468′],’8901’],则此解决方案有效

import re
df['digits'] = df['B'].apply(lambda x: re.findall('\d+', str(x)))
df['digits'] = df['digits'].str.get(0)
print(df)

输出

   A             B    digits
0  aa          1234   1234
1  ab          3456   3456
2  bc  [1357, 2468]   1357
3  cc          8901   8901

同样,如果不需要,您可以删除B列.

相关文章

转载:一文讲述Pandas库的数据读取、数据获取、数据拼接、数...
Pandas是一个开源的第三方Python库,从Numpy和Matplotlib的基...
整体流程登录天池在线编程环境导入pandas和xrld操作EXCEL文件...
 一、numpy小结             二、pandas2.1为...
1、时间偏移DateOffset对象DateOffset类似于时间差Timedelta...
1、pandas内置样式空值高亮highlight_null最大最小值高亮背景...