python - 从文本字符串中提取数字并将其移动到数据框中的单独列中
问题描述
我有一个作为一列导入的井数据的数据框,我拆分如下:
df = pd.read_csv(r'df.txt', header=None)
df.columns = ['Test']
df = df.Test.str.split(expand=True)
0 1 2 3 4 5 6
0 well 1 20060201 3623.23 0.00 1300.00 None
1 well 1 20060202 3627.07 0.00 1305.00 None
2 well 1 20060203 3576.48 0.00 1305.00 None
... ... .. ... ... ... ... ...
42089 well14 20201114 0.00 0.00 0.00 None
42090 well14 20201115 0.00 0.00 0.00 None
... ... .. ... ... ... ... ...
51000 well 7 20201116 0.00 0.00 0.00 None
51001 well 7 20201117 0.00 0.00 0.00 None
如您所见,我的一些数据包含井名,其编号附在名称上。代码将其读取为一个实体并将其放入第 0 列。名称和编号之间有空格的井被分类到第 0 列和第 1 列。由于移位,添加了一个额外的列(第 6 列)。
我尝试使用 str.extract() 和 str.split() 将数字与井名分开并将其移动到第 1 列,这样我就可以使用 str.cat() 将第 0 列和第 1 列连接在一起,但是我无法让它工作。我需要它来处理不同的井名和编号。
最后,我需要我的数据看起来像这样:
0 1 2 3 4
0 well 1 20060201 3623.23 0.00 1300.00
1 well 1 20060202 3627.07 0.00 1305.00
2 well 1 20060203 3576.48 0.00 1305.00
... ... .. ... ... ... ...
42089 well 14 20201114 0.00 0.00 0.00
42090 well 14 20201115 0.00 0.00 0.00
... ... .. ... ... ... ...
51000 well 7 20201116 0.00 0.00 0.00
51001 well 7 20201117 0.00 0.00 0.00
对此有任何帮助将不胜感激。谢谢!
解决方案
咱们试试吧:
# extract the names and digits
tmp = df[0].str.extract('^(.*\D)(\d+)?$')
# where the names are attached to digits
name_with_digits = tmp[1].notna()
# shift these values horizotally
df.loc[name_with_digits, 1:] = df.loc[name_with_digits, 1:].shift(axis=1)
# update the names
df.loc[name_with_digits,[0,1]] = tmp
# concatenate the names
df[0] = df[0] + ' ' + df[1].astype(str)
# drop unnecessary columns
df = df.drop([1,6], axis=1)
输出:
0 2 3 4 5
0 well 1 20060201.0 3623.23 0.0 1300.00
1 well 1 20060202.0 3627.07 0.0 1305.00
2 well 1 20060203.0 3576.48 0.0 1305.00
42089 well 14 20201114 0.0 0.0 0.0
42090 well 14 20201115 0.0 0.0 0.0
推荐阅读
- json - 进行chainlink API调用时替代request.addStringArray
- javascript - 对象引用和复制
- css - 固定宽度的材质 UI 网格流动宽度
- android - 连接到 Rest API 的 Android 客户端
- java - JAXB 通过多个导入从 XSD 生成 Java
- arm - 如何修复目标和构建机器之间的 GLIBC 版本不匹配?
- web-scraping - 所有的不会用 beautifulsoup 打印
- typescript - 使用 TypeScript 的 Puppeteer - 类型“元素”上不存在属性“点击”
- r - 使用 ShinyApp 处理字符编码问题
- google-apps-script - GMail消息打开时触发插件,无需单击插件按钮并打开插件卡