我有一個pandas df中的列,它的格式是 "1_A01_1_1_NA",我想提取下劃線之間的文本,例如 "A01""1""1 "和 "NA",我試著用左鍵和中鍵,但問題是在某些時候列的值會變成類似11_B40_11_8_NA這樣。
df有7510行。
uj5u.com熱心網友回復:
使用str.split:
df = pd. DataFrame({'Col1'/span>: ['1_A01_1_NA'/span>, '11_B40_11_8_NA'/span>]})
out = df['Col1'].str.split('_', expand=True)
輸出:
>>> out
0 1 2 3 4
0 1 A01 1 1 NA
1 11 B40 11 8 NA
uj5u.com熱心網友回復:
你要找的函式是Pandas.series.str.split()。
你應該能夠將你的討厭的列作為一個系列,并使用str.split("_", expand = True)方法。你可以看到 "expand "這個關鍵字正是你需要的,它可以從結果中產生新的列(在"_"字符上分割,而不是任何特定的索引)。
所以,像這樣:
首先我們需要創建一個像你這樣的胡言亂語的小東西。 (請原諒我亂七八糟的代碼,我還是個新手)
import pandas as pd
from random import choice
import string
# 創建無意義的資料框架 import string
def make_nonsense_codes() 。
""
回傳一個類似'11_B40_11_8_NA'的無意義的字串。
""
nonsense = "_"/span>.join(
[
"".join(choice(string.digits) for i in range(2))。
"".join(
[choice(string.ascii_uppercase),
"".join([choice(string.digits) for i in range(2) ])
]
),
"".join(choice(string.digits) for i in range(2))。
choice(string.digits)。
"NA")
]
)
return nonsense
my_nonsense_df = pd.DataFrame(
{"Nonsense" : [make_nonsense_codes() for i in range(5)]}。
)
print(my_nonsense_df)
# Nonsense[/span]。
# 0 25_S91_13_1_NA
# 1 80_O54_58_4_NA[/span]。
# 2 01_N98_68_3_NA[/span]。
# 3 88_B37_14_9_NA[/span]。
# 4 62_N65_73_7_NA[/span
現在我們可以選擇我們的"Nonsense"列,并使用str.split()。
# Wrangled the nonsense column with series.str.split()
wrangled_nonsense_df = my_nonsense_df["Nonsense"].str.split("_", expand = True)
print(wrangled_nonsense_df)
# 0 1 2 3 4
# 0 25 S91 13 1 NA
# 1 80 O54 58 4 NA
# 2 01 N98 68 3 NA
# 3 88 B37 14 9 NA[/span].
# 4 62 N65 73 7 NA
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/307846.html
標籤:
