【问题标题】:Python dataframe replace strings in specific conditionPython数据框在特定条件下替换字符串
【发布时间】:2021-10-10 15:24:40
【问题描述】:
import numpy as np
import pandas as pd

我的 df 看起来像这样

   X
0  100A
1  100B
2  100B
3  500A
4  500B
5  400B
6  700A
7  200B
8  400B
9  900A
10  800B

我的目标是将它们(字符串)更改为整数,如果字符串中包含“A”,则将数字除以 10

   X
0  10
1  100
2  100
3  50
4  500
5  400
6  70
7  200
8  400
9  90
10  800

我尝试对整个列使用 for 循环

for i in df.X:
    if 'A' in i:
        y = i.replace('A','') 
        y = int(y)/10
        print(y)
    else:
        k = i.replace('B','')
        k = int(k)
        print(k)

但我只能打印出来,我不知道如何直接替换值并将它们存储在列中。另外,这种方法似乎很慢?熊猫有更好的方法吗?谢谢!

【问题讨论】:

    标签: python pandas numpy loops


    【解决方案1】:

    试试这个:

    a_index = df[df[0].str.endswith('A')]
    df = df[0].str.slice(stop=-1).astype(int)
    df[a_index.index] = df[a_index.index] / 10
    

    首先,我保存以 A 结尾的每一行的索引。然后,我将所有内容转换为整数。最后,我们将之前索引的项目 (a_index) 除以 10

    Demo

    【讨论】:

      【解决方案2】:

      你可以使用正则表达式解决这个问题:

      import re
      import pandas as pd
      
      df = pd.DataFrame({'A':['100A','100B','200A']})
      
      for row in range(0,len(df)):
          if df.iloc[row].str.contains('A').any():
             new_value = int(re.sub('\D', '', df.iloc[row].values[0]))/10
             df.iloc[row] = new_value
          else:
              new_value = int(re.sub('\D', '', df.iloc[row].values[0]))
              df.iloc[row] = new_value
      
      

      输出

           A
      0  10.0
      1   100
      2  20.0
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-05-06
        • 2015-02-02
        • 1970-01-01
        • 1970-01-01
        • 2018-12-02
        • 2014-01-07
        • 2023-02-06
        • 1970-01-01
        相关资源
        最近更新 更多