Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Menghapuskan Lajur Senarai dalam Pandas DataFrames?
Apabila berurusan dengan DataFrames yang mengandungi lajur senarai, adalah berguna untuk "membuka" senarai ini ke dalam baris yang berasingan.
Untuk letupan satu lajur, gunakan explode() terus:
df = pd.DataFrame({'A': [1, 2], 'B': [[1, 2], [1, 2]]}) df_exploded = df.explode('B')
df_exploded = df.set_index('A').B.apply(pd.Series).stack().reset_index(level=0).rename(columns={0:'B'})
df_exploded = pd.DataFrame({'A':df.A.repeat(df.B.str.len()),'B':np.concatenate(df.B.values)})
df_exploded = df.reindex(df.index.repeat(df.B.str.len())).assign(B=np.concatenate(df.B.values))
from collections import ChainMap d = dict(ChainMap(*map(dict.fromkeys, df['B'], df['A']))) df_exploded = pd.DataFrame(list(d.items()),columns=df.columns[::-1])
newvalues=np.dstack((np.repeat(df.A.values,list(map(len,df.B.values))),np.concatenate(df.B.values))) df_exploded = pd.DataFrame(data=newvalues[0],columns=df.columns)
from itertools import cycle,chain l=df.values.tolist() l1=[list(zip([x[0]], cycle(x[1])) if len([x[0]]) > len(x[1]) else list(zip(cycle([x[0]]), x[1]))) for x in l] df_exploded = pd.DataFrame(list(chain.from_iterable(l1)),columns=df.columns)
Kepada umumkan kaedah di atas untuk berbilang lajur, gunakan fungsi berikut:
def unnesting(df, explode): idx = df.index.repeat(df[explode[0]].str.len()) df1 = pd.concat([ pd.DataFrame({x: np.concatenate(df[x].values)}) for x in explode], axis=1) df1.index = idx return df1.join(df.drop(explode, 1), how='left')
Untuk membuka sarang secara mendatar, ubah suai fungsi:
def unnesting(df, explode, axis): if axis==1: # Previous implementation else : df1 = pd.concat([ pd.DataFrame(df[x].tolist(), index=df.index).add_prefix(x) for x in explode], axis=1) return df1.join(df.drop(explode, 1), how='left')
Atas ialah kandungan terperinci Bagaimana untuk Menghapuskan Lajur Senarai dalam Pandas DataFrames?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!