【问题标题】:Moving rows of data within pandas dataframe to end of last column将熊猫数据框中的数据行移动到最后一列的末尾
【发布时间】:2016-08-23 21:51:16
【问题描述】:

Python新手,请温柔。我在多个 Excel 电子表格的两个“中间部分”中有数据,我想将它们隔离到一个 pandas 数据框中。以下是数据截图的链接。 在每个文件中,我的标题在第 4 行,数据在第 5-15 行,B:O 列。然后标题和数据继续第 21 行的标题,第 22-30 行的数据,B:L 列。我想从第二组移动标题和数据并将它们附加到第一组数据的末尾。

此代码捕获第 4 行的标题和 B:O 列中的数据,但捕获标题下的所有行,包括第二个标题和第二组数据。如何移动第二组数据并将其附加到第一组数据之后?

path =r'C:\Users\sarah\Desktop\Original' 
allFiles = glob.glob(path + "/*.xls")

frame = pd.DataFrame()
list_ = []
for file_ in allFiles:
  df = pd.read_excel(file_,sheetname="Data1", parse_cols="B:O",index_col=None, header=3, skip_rows=3 )

list_.append(df)
frame = pd.concat(list_)

Screenshot of my data

【问题讨论】:

  • 刚刚意识到我的问题并不全面;现已编辑。
  • 第二部分 (B:L) 的最后三列将包含 NaN - 这就是您想要的吗?在这种情况下,您可以使用skip_rows=[0,1,2,20]
  • 感谢您的回复!我可以稍后删除 NaN,但我认为您的解决方案并不完全允许我从第二组中移动我的标题和数据并将其附加到第一组?
  • 我不太明白。您想在一个 DF 中有两组不同的列名(标题)吗?
  • 我添加了我的数据截图;希望这可以使它更清楚。感谢您的耐心等待!

标签: python excel pandas dataframe


【解决方案1】:

如果您的所有 Excel 文件具有相同的行数并且这是一次性操作,您可以简单地将这些数字硬编码到您的 read_excel 中。如果不是,那会有点棘手,但您几乎遵循相同的程序:

for file_ in allFiles:
    top = pd.read_excel(file_, sheetname="Data1", parse_cols="B:O", index_col=None,
                        header=4, skip_rows=3, nrows=14) # Note the nrows kwag
    bot = pd.read_excel(file_, sheetname="Data1", parse_cols="B:L", index_col=None,
                        header=21, skip_rows=20, nrows=14)
    list_.append(top.join(bot, lsuffix='_t', rsuffix='_b'))

【讨论】:

  • 谢谢!我试过这个但我得到一个错误:ValueError:列重叠但没有指定后缀:Index(['Unnamed:1','Unnamed:2','Unnamed:5','Unnamed:7'],dtype ='object ')。我也尝试了 .merge 而不是 .join 但我得到了错误:MergeError: No common columns to perform merge on。似乎它正在尝试合并数据,而不是像我想的那样并排放置。
  • 不不......你需要使用join,而不是merge......看看它的文档中带有“后缀”的kwargs。我在机场登机,否则我会编辑我的答案以包含它。但我不记得我头顶上的小矮人了。
【解决方案2】:

你可以这样做:

df1 = pd.read_excel(file_,sheetname="Data1", parse_cols="B:O",index_col=None, header=3, skip_rows=3)
df2 = pd.read_excel(file_,sheetname="Data1", parse_cols="B:L",index_col=None, header=20, skip_rows=20)
# pay attention at `axis=1`
df = pd.concat([df1,df2], axis=1)

【讨论】:

  • @Sarah,不客气。 :) 请考虑accepting / 点赞最有帮助的答案 - 这也表明您的问题已得到解答
猜你喜欢
  • 2022-08-02
  • 2022-12-17
  • 1970-01-01
  • 1970-01-01
  • 2013-12-04
  • 1970-01-01
  • 1970-01-01
  • 2021-04-27
相关资源
最近更新 更多