拆分Pandas DataFrame 中的逗號分隔字串條目以建立單獨的行
問題:
問題:
問題:
問題:
In [1]: df.explode('var1') Out[1]: var1 var2 var3 0 a 1 XX 1 b 1 XX 2 c 1 XX 3 d 2 ZZ 4 e 2 ZZ 5 f 2 ZZ 6 x 2 ZZ 7 y 2 ZZ
>我們有一個Pandas DataFrame,其中一列包含帶有逗號分隔值的字串。我們希望拆分每個 CSV 條目並為每個唯一值建立一個新行。例如,“a,b,c”應變為“a”,“b”,“c”。
解決方案:
import numpy as np def explode(df, lst_cols, fill_value='', preserve_index=False): # Convert `lst_cols` to a list if it is a string. if isinstance(lst_cols, str): lst_cols = [lst_cols] # Calculate the lengths of each list in `lst_cols`. lens = df[lst_cols[0]].str.len() # Create a new index based on the lengths of the lists. idx = np.repeat(df.index.values, lens) # Create a new DataFrame with the exploded columns. exp_df = pd.DataFrame({ col: np.repeat(df[col].values, lens) for col in df.columns.difference(lst_cols) }, index=idx).assign(**{ col: np.concatenate(df.loc[lens > 0, col].values) for col in lst_cols }) # Append rows with empty lists if necessary. if (lens == 0).any(): exp_df = exp_df.append(df.loc[lens == 0, df.columns.difference(lst_cols)], sort=False).fillna(fill_value) # Revert the original index order and reset the index if requested. exp_df = exp_df.sort_index() if not preserve_index: exp_df = exp_df.reset_index(drop=True) return exp_df選項1: DataFrame.explode() (Pandas 0.25.0 )
In [2]: explode(df, 'var1') Out[2]: var1 var2 var3 0 a 1 XX 1 b 1 XX 2 c 1 XX 3 d 2 ZZ 4 e 2 ZZ 5 f 2 ZZ 6 x 2 ZZ 7 y 2 ZZDataFrame.explode () 方法是專門為此目的而設計的。它允許我們將類似列表的列(在本例中為逗號分隔的字串)拆分為單獨的行。 選項2:自訂向量化函數如果DataFrame.explode() 不可用或我們需要更多定制,我們可以創建自己的向量化函數:用法範例:
以上是如何將 Pandas DataFrame 中的逗號分隔字串拆分為單獨的行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!