将单元格表单提取到具有相同列名的新行中(读取多个文件)

时间:2019-10-18 07:06:24

标签: python pandas dataframe

我想根据b2-b5行找到c2-c5的值,并将其与数据框一起添加到行中。

这是我正在使用的示例数据。

..  2   3   4   5   6   7   8
0   a   b   c   d   e   f   g
1   a1  b1  c1  d1  e1  f1  g1
2   a2  b2  c2  d2  e2  f2  g2
3   a3  b3  c3  d3  e3  f3  g3
4   a4  b4  c4  d4  e4  f4  g4
5   a5  b5  c5  d5  e5  f5  g5

我尝试的代码:随着值的替换,我必须将df.loc放到外面。

data=[]
for file in files:
    df=pd.read_excel(file, header=None)
    df['Year'] = file.split('_')[0]
    df['Final'] = df.iat(1,1)
    df['Comments'] = df.iat(2,1)

    data.append(df)
 df1 = df.loc[df[3].isin(['b2','b3','b4','b5']),[3,4]].assign(year=file.split('.')[0]).assign(df['Year]....)

我希望结果是这样的:

1   2   3   4   5    year
.
.
.    .   . abc  def
.    .   .  b2  c2   2019 
.    .   .  b3  c3   2019
            b4  c4   2019
            b5  c5   2019
            b2  c2   2019 
            b3  c3   2019
            b4  c4   2019
            b5  c5   2019

2 个答案:

答案 0 :(得分:0)

想法是按Series.isin过滤所有值,并按DataFrame.assignyear添加新列appenddata每个过滤的数据帧列出data=[] for file in files: df=pd.read_excel(file, header=None) df = df.loc[df[3].isin(['b2','b3','b4','b5']),[3, 4]].assign(year=file.split('.')[0]) data.append(df) df = pd.concat(data, ignore_index=True) 并最后使用{{ 3}}:

df = df.loc[df[3].isin(['b2','b3','b4','b5']),[3, 4]].assign(year=2019)
print (df)
    3   4  year
2  b2  c2  2019
3  b3  c3  2019
4  b4  c4  2019
5  b5  c5  2019

使用示例数据进行测试:

ItemStreamReader

答案 1 :(得分:0)

如果我有不同的年份并想添加更多不同的列怎么办?

 data=[]
    for file in files:
        df=pd.read_excel(file, header=None)
        df['Year']= filename.split('_')
        df = df.loc[df[3].isin(['b2','b3','b4','b5']),[3, 4]]
        data.append(df)

df = pd.concat(data, ignore_index=True)