从pandas dataframe列中检索列表元素

时间:2017-03-15 03:39:29

标签: python pandas

假设有reduce喜欢:

pandas.DataFrame

生成2 pd.DataFrame([[np.nan,np.nan],[[1,2],[3,4]],[[11,22],[33,44]]],columns=['A','B']) 的最简单方法是什么,每个pandas.DataFrames包含帧中每个值列表的第1个和第2个元素(如果位置是nan,则为nan)。

pd.DataFrame([[np.nan,np.nan],[1,3],[11,33]],columns=['A','B'])
pd.DataFrame([[np.nan,np.nan],[2,4],[22,44]],columns=['A','B'])

2 个答案:

答案 0 :(得分:1)

您可以使用:

#replace NaN to [] - a bit hack
df = df.mask(df.isnull(), pd.Series([[]] * len(df.columns), index=df.columns), axis=1)
print (df)
          A         B
0        []        []
1    [1, 2]    [3, 4]
2  [11, 22]  [33, 44]

#create new df by each column, concanecate together
df3 = pd.concat([pd.DataFrame(df[col].values.tolist()) for col in df],
                axis=1, 
                keys=df.columns)
print (df3)
      A           B      
      0     1     0     1
0   NaN   NaN   NaN   NaN
1   1.0   2.0   3.0   4.0
2  11.0  22.0  33.0  44.0

#select by xs
df1 = df3.xs(0, level=1, axis=1)
print (df1)
      A     B
0   NaN   NaN
1   1.0   3.0
2  11.0  33.0

df2 = df3.xs(1, level=1, axis=1)
print (df2)
      A     B
0   NaN   NaN
1   2.0   4.0
2  22.0  44.0

答案 1 :(得分:0)

您可以使用返回每列myabc.py元素的函数来执行您所需的操作。

<强>代码:

n'th

测试代码:

def row_element(elem_num):
    def func(row):
        ret = []
        for item in row:
            try:
                ret.append(item[elem_num])
            except:
                ret.append(item)
        return ret
    return func

<强>结果:

df = pd.DataFrame(
    [[np.nan, np.nan], [[1, 2], [3, 4]], [[11, 22], [33, 44]]],
    columns=['A', 'B'])

print(df)
print(df.apply(row_element(0), axis=1))
print(df.apply(row_element(1), axis=1))