簡體   English   中英

在dataframe中分割每個單元格(pandas / python)

[英]split each cell in dataframe (pandas/python)

我有一個大型的pandas數據幀,包含許多行和列,包含二進制數據,如'0 | 1','0 | 0','1 | 1','1 | 0',我想在2個數據幀中拆分,和/或擴展以便這個(兩者對我都有用):

        a   b   c   d
rowa    1|0 0|1 0|1 1|0
rowb    0|1 0|0 0|0 0|1
rowc    0|1 1|0 1|0 0|1

        a   b   c   d
rowa1   1   0   0   1
rowa2   0   1   1   0
rowb1   0   0   0   0
rowb2   1   0   0   1
rowc1   0   1   1   0
rowc2   1   0   0   1

和/或

    df1:    a   b   c   d
    rowa    1   0   0   1
    rowb    0   0   0   0
    rowc    0   1   1   0


    df2:    a   b   c   d
    rowa    0   1   1   0
    rowb    1   0   0   1
    rowc    1   0   0   1

目前我正在嘗試做類似以下的事情,但相信這不是很有效,任何指導都會有所幫助。

Atmp_dict=defaultdict(list)
Btmp_dict=defaultdict(list)

for index,row in df.iterrows():
    for columnname in list(df.columns.values):
        Atmp_dict[columnname].append(row[columnname].split('|')[0])
        Btmp_dict[columnname].append(row[columnname].split('|')[1])

user2734178已關閉,但他或她的回答有一些問題。 這是一個有點微小的變化

import pandas as pd

df1 = pd.DataFrame()
df2 = pd.DataFrame()

# df is your original DataFrame
for col in df.columns:
    df1[col] = df[col].apply(lambda x: x.split('|')[0])
    df2[col] = df[col].apply(lambda x: x.split('|')[1])

這是另一個更優雅的選擇。 將循環替換為:

for col in df.columns:
    df1[col] = df[col].str.extract("(\d)\|")
    df2[col] = df[col].str.extract("\|(\d)")

這非常緊湊,但似乎應該有一種更簡單,更緊湊的方式。

df1 = df.applymap( lambda x: str(x)[0] ) 
df2 = df.applymap( lambda x: str(x)[2] )

或者像其他答案一樣循環遍歷列。 我認為這不重要。 請注意,因為問題指定了二進制數據,所以只需執行str[0]str[2]而不是使用splitextract就可以(並且更簡單)。

或者你可以做到這一點,這看起來幾乎是愚蠢的,但它沒有任何實際的錯誤,它相當緊湊。

df1 = df.stack().str[0].unstack()
df2 = df.stack().str[2].unstack()

stack只是將它轉換為一個系列,這樣你就可以使用str然后unstack將它轉換回數據幀。

由於看起來你的所有值都是字符串,你可以使用.str訪問器將管道拆分為分隔符,例如,

import pandas as pd

df1 = pd.DataFrame()
df2 = pd.DataFrame()

#df is defined as in your first example
for col in df.columns:
    df1[col] = df[col].str[0]
    df2[col] = df[col].str[-1]

然后,您可能希望使用astype(int)df1df2重鑄為int列。

暫無
暫無

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

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