我有一个井数据的数据帧,作为一列导入,我的拆分如下:
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.textract((和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