我有几个相同格式的pandas DataFrame,有五列。
我想使用df.sum()
对每个数据框的值求和。这将为每个Dataframe创建一个Series,仍然有5列。
我的问题是如何使用这些系列,并创建另一个Dataframe,一列是文件名,其他列是df.sum()
上面的五列
import pandas as pd
import glob
batch_of_dataframes = glob.glob("*.txt")
newdf = []
for filename in batch_of_dataframes:
df = pd.read_csv(filename)
df['filename'] = str(filename)
df = df.sum()
newdf.append(df)
newdf = pd.concat(newdf, ignore_index=True)
不幸的是,这种方法不起作用。 'df ['filename'] = str(filename)'抛出TypeError,并且创建新数据帧newdf
无法正确解析。
如何正确地做到这一点?
如何处理多个pandas.Series
个对象并创建DataFrame
?
答案 0 :(得分:0)
回答这个具体问题:
@ThomasTu如何使用'文件名'来自系列列表?作为一个 列到数据帧?我认为这就是问题---我不明白 此
它本质上就是你现在所拥有的,但不是附加到空列表,而是附加到空数据帧。如果您不想在每次迭代时重新分配newdf,我认为这是一个inplace关键字。
import pandas as pd
import glob
batch_of_dataframes = glob.glob("*.txt")
newdf = pd.DataFrame()
for filename in batch_of_dataframes:
df = pd.read_csv(filename)
df['filename'] = str(filename)
df = df.sum()
newdf = newdf.append(df, ignore_index=True)
答案 1 :(得分:0)
尝试按此顺序:
创建一个空列表,例如list_of_series
。
对于每个文件:
加载到数据框中,然后将总和保存在一系列s
向s:s['filename'] = your_filename
将s
追加到list_of_series
最后,连接(并根据需要进行转置):
final_df = pd.concat(list_of_series, axis = 1).T
的制备:将
l_df = [pd.DataFrame(np.random.rand(3,5), columns = list("ABCDE")) for _ in range(5)]
for i, df in enumerate(l_df):
df.to_csv(str(i)+'.txt', index = False)
文件* .txt以逗号分隔并包含标题。
! cat 1.txt
A,B,C,D,E
0.18021800981245173,0.29919271590063656,0.09527248614484807,0.9672038093199938,0.07655003742768962
0.35422759068109766,0.04184770882952815,0.682902924462214,0.9400817219440063,0.8825581077493059
0.3762875793116358,0.4745731412494566,0.6545473610147845,0.7479829630649761,0.15641907539706779
事实上,其余部分与你所做的完全相似(我将文件名附加到系列,而不是数据框。否则它们会被sum()
多次连接):
files = glob.glob('*.txt')
print(files)
['3.txt', '0.txt', '4.txt', '2.txt', '1.txt']
list_of_series = []
for f in files:
df = pd.read_csv(f)
s = df.sum()
s['filename'] = f
list_of_series.append(s)
final_df = pd.concat(list_of_series, axis = 1).T
print(final_df)
A B C D E filename
0 1.0675 2.20957 1.65058 1.80515 2.22058 3.txt
1 0.642805 1.36248 0.0237625 1.87767 1.63317 0.txt
2 1.68678 1.26363 0.835245 2.05305 1.01829 4.txt
3 1.22748 2.09256 0.785089 1.87852 2.05043 2.txt
4 0.910733 0.815614 1.43272 2.65527 1.11553 1.txt