【问题标题】:Pandas: Merging multiple (~30) tables together?Pandas:将多个(约 30 个)表合并在一起?
【发布时间】:2016-07-14 20:29:18
【问题描述】:

所以我目前在一个文件夹中有 30 多个单独的表格,格式如下:

Name1 = pd.read_csv('Name1.txt')

姓名1:

         A    B    C    D    
type1    1    1    NaN  4
type2    2    0    NaN  2
type3    3    2.1  NaN  .2
type4    1    2    NaN  1

所以我有 30 个这样的表格,并希望得到一个看起来像这样的完整表格:

       Name1/A  Name1/B Name1/D  Name2/A Name2/B Name2/C ...... Name30/C 
type1    1        1       4       ...     ...     ...             ...         
type2    2        0       2       ...     ...     ...             ...
type3    3        2.1     .2      ...     ...     ...             ...
type4    1        2       1       ...     ...     ...             ...

我一直在尝试使用 for 循环读取数据并使用 pd.concat(...) 但它似乎没有做任何事情

我想我的主要问题之一是弄清楚我应该如何创建一个数据框来组合所有这些不同的图表,而不必为所有 30 个表执行 pd.read_csv('NameX.txt') 然后将它们全部合并一起。 我认为 for 循环将是主要的救星,但每次我尝试在 for 循环中读取它们时,它都会告诉我找不到文件。

此外,如果有帮助,我的文件以“Name1.txt”、“Name2.txt”、“Name3.txt”等命名,而且 type1 到 type4 列在每个列中都不会改变图表和值为 NaN 的列将在最终的更大表格中删除。

任何建议都会很棒!谢谢你!

【问题讨论】:

  • pandas Panel 适合你吗?
  • 是的!我相信我有 pandas.Panel!你有什么想法吗?
  • 对于您在下面的评论,您似乎想要 one DataFrame 中的所有内容。面板会给你几个 DataFrames。

标签: python-3.x pandas


【解决方案1】:

如果您不希望仅在一个 DataFrame 中包含所有内容,您可以尝试Pandas Panel

dfs = {n:pd.read_csv('Name{}.txt'.format(n) for n in range(1,30)}
panel = pd.Panel(dfs)

更多信息,您可以查看this

【讨论】:

    【解决方案2】:

    试试:

    names = ['Name{}'.format(i) for i in xrange(1, 31)]
    files = ['{}.txt'.format(n) for n in names]
    
    df = pd.concat([pd.read_csv(f, index_col=0) for f in files],
                   axis=1, keys=names)
    
    cols = df.columns.to_series()
    df.columns = cols.str.get(0).astype(str) + '/' + cols.str.get(1)
    
    df.iloc[:, :10]
    

    【讨论】:

    • 感谢您的意见!我尝试了这个并且一直在尝试对其进行一些更改,因为这给了我一列,所有内容都集中在这一列中,使数据变得非常混乱和复杂。我很高兴现在一切似乎都在一个数据框中,但现在我正试图将它操纵到不同的列中。
    • @CallieJester axis=1 参数应确保每个 pd.read_csv 返回的数据帧是并排连接的。你能显示你正在运行的实际代码吗?还是你得到的输出?
    • 我的代码与您建议的代码几乎相同。唯一的区别是我把名字放在名单中。列的输出如下: Name1.ABCDABCDABC ext...
    • @CallieJester 我更新了我的帖子。注意我在read_csv 调用中插入了index_col=0
    • 哇,这真的很奇怪,我知道你做了什么,但是当我尝试这个时,它现在给了我 0 列和许多行,其中所有的数字彼此相邻,例如:NaN /t0.00/1.00/NaN....
    猜你喜欢
    • 2018-07-24
    • 2022-11-07
    • 1970-01-01
    • 2016-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多