嗨,下面的代码只提供给我上一次file.There的数据,这是concat或for循环中的一个问题。我正在从两个文件中读取数据。每个列都应该包含近350行,3列符合for循环中的条件。所以在最后,数据帧应该给出近700×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乘3,这里有什么问题?
发布于 2020-05-07 09:07:44
我甚至创建了一个“更宽”的例子,传递也键参数(“源标记”)。
源文件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的这个细节上有所不同,顶层显示了每一行的起源,从而简化了对正在发生的事情的跟踪。
只要尝试我的代码和我的输入文件,结果应该和我的一样。
然后用您的文件替换我的一个文件(并运行代码)。最后,用第二个文件替换第二个我的文件,然后再次运行代码。
最后删除键参数,在结果中有一个普通的索引。
可能你的错误来源在其他地方。
顺便说一句:您不需要导入glob,因为您只使用路径中的glob。
https://stackoverflow.com/questions/61650990
复制相似问题