【问题标题】:Concatenation data in dataframe数据框中的连接数据
【发布时间】:2020-05-07 06:05:43
【问题描述】:

您好,下面的代码只给了我最后一个文件中的数据。concat 或 for 循环有问题。我正在从 2 个文件中读取数据。每个都应包含近 350 行 3 列,它们与 for 循环中的条件一致。所以最后数据帧应该给出近 700 x 3 个数据帧。但它只显示最后一个文件中的数据。

import glob
from pathlib import Path

path = Path(r'C:\Users\PC\Desktop\datafiles')
filenames = path.glob('*.txt')
toconcat = []
for i in filenames:
    data1 = pd.read_csv(i, sep="\t", header=None)
    data1.columns = ['number','ab','cd','as','sd','dfg']
    dataset1 = pd.DataFrame(data1.loc[data1.number==1,['number','ab','cd']])
    toconcat.append(dataset1)

result = pd.concat(toconcat)
result

但是当我使用 result.shape 时,它​​显示 700 x 3 这里有什么问题?

【问题讨论】:

  • 添加示例数据框和预期输出
  • 当你打印你的 toconcat 列表时,你看到你的两个数据框了吗?
  • 循环读取的不仅仅是最后一个文件中的数据
  • 检查你的 for 循环是否遍历所有文件,另一种想法是只有一个文件满足你的条件data1.number==1
  • 不,它会读取两个文件。我用计数检查了它。并且两个文件都包含满足 data1.number==1 条件的数据。

标签: python pandas dataframe concatenation


【解决方案1】:

我甚至创建了一个“更广泛”的示例,还传递了 keys 参数 (“原点标记”)。

源文件Input_1.txt

1   ab1 cd1 as1 sd1 dfg1
1   ab2 cd2 as2 sd2 dfg2
1   ab3 cd3 as3 sd3 dfg3
2   ab4 cd4 as4 sd4 dfg4

源文件Input_2.txt

1   ab5 cd5 as5 sd5 dfg5
1   ab6 cd6 as6 sd6 dfg6
1   ab7 cd7 as7 sd7 dfg7
2   ab8 cd8 as8 sd8 dfg8

(以上两个文件都是制表符分隔的)。

还有代码:

toconcat = []
keys = []
path = Path(r'C:\Users\...')  # Replace dots with your path
filenames = path.glob('*.txt')
for i in filenames:
    data1 = pd.read_csv(i, sep='\t', names=['number', 'ab', 'cd', 'as', 'sd', 'dfg'])
    dataset1 = data1.loc[data1.number==1, ['number', 'ab', 'cd']]
    toconcat.append(dataset1)
    keys.append(i.stem)
result = pd.concat(toconcat, keys=keys)
print(result)

请注意,列名可以早在 read_csv 中传递(就像我一样)。

对于我的输入文件,结果是:

           number   ab   cd
Input_1 0       1  ab1  cd1
        1       1  ab2  cd2
        2       1  ab3  cd3
Input_2 0       1  ab5  cd5
        1       1  ab6  cd6
        2       1  ab7  cd7

所以你的代码看起来不错。我的代码仅在这个细节上有所不同 结果包含 MultiIndex,顶层显示 每一行,因此可以轻松跟踪正在发生的事情。

试试我的代码和我的输入文件,结果应该和我的一样。

然后用您的文件替换我的文件之一(并运行代码)。 最后用你的第二个文件替换第二个我的文件并运行 再次输入代码。

最后删除keys参数,让结果中有一个普通的索引。

您的错误可能来自其他地方。

顺便说一句:您不需要 import glob,因为您只使用 path 中的 glob

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-10
    • 2020-04-08
    • 2022-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-01
    相关资源
    最近更新 更多