我有一个数据帧,用于作为一栏导入的井数据,我已经像这样拆分了:
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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句