簡體   English   中英

在 python 中拆分 dataframe 中的文本和數字

[英]Splitting text and numbers in dataframe in python

我有一個 dataframe df,列名為“col”作為第二列,數據如下所示: Dataframe

想要將文本部分分隔在一列中,名稱為“Casing Size”,數字部分在另一列中分隔為“DepthTo”。 所需 Output

import pandas as pd
import io
from google.colab import files
uploaded = files.upload()
df = pd.read_excel(io.BytesIO(uploaded['Test-Checking.xlsx']))

#Method 1
df2 = pd.DataFrame(data=df, columns=['col'])
df2 = df2.col.str.extract('([a-zA-Z]+)([^a-zA-Z]+)', expand=True)
df2.columns = ['CasingSize', 'DepthTo']
df2

#Method 2
def split_col(x):
  try:
      numb = float(x.split()[0])
      txt = x.split()[1]
  except:
       numb = float(x.split()[1])
       txt = x.split()[0]
    x['col1'] = txt
    x['col2'] = numb
 df2['col1'] = df.col.apply(split_col)
 df2

嘗試了兩種方法,但都沒有正常工作。 有人幫我嗎?

Google Colab中的代碼

Excel文件

嘗試這個

首先,您需要從函數中返回值。 然后你可以使用 to_list() 將它們解壓到你的列中

def sample(x):
    b,y=x.split()
    return b,y

temp_df=df2['col'].apply(sample)

df2[['col1','col2']]=pd.DataFrame(temp_df.tolist())

您可以嘗試將這些值拆分為一個列表,然后對它們進行排序,以使數字部分排在第一位。 然后您可以應用pd.Series並分配回兩列。

import pandas as pd

df = pd.DataFrame({'col':["PWT 69.2", '283.5 HWT', '62.9 PWT', '284 HWT']})

df[['Casing Size','DepthTO']] = df['col'].str.split().apply(lambda x: sorted(x)).apply(pd.Series)

print(df)

Output

         col Casing Size DepthTO
0   PWT 69.2        69.2     PWT
1  283.5 HWT       283.5     HWT
2   62.9 PWT        62.9     PWT
3    284 HWT         284     HWT

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM