【发布时间】:2016-05-03 11:44:17
【问题描述】:
我有几个相同格式的 pandas DataFrame,有五列。
我想使用df.sum() 对每个数据帧的值求和。这将为每个数据框创建一个系列,仍然有 5 列。
我的问题是如何获取这些系列,并创建另一个数据框,一列是文件名,其他列是上面来自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?
【问题讨论】:
-
您可以发布一些示例数据来模拟您的输入数据框之一吗?这里有几个问题。 1. df.sum() 返回带有
len(df.columns)行的系列(或len(df),具体取决于axis=0 还是1)。系列中没有列。 2. new_df 只是一个系列列表,所以你最终会得到另一个系列。 3. 您应该在df['colname'] = 'value'上发布完整的回溯。这真的不应该失败。这让我觉得无论出于何种原因,您的数据实际上只是 1 列并作为一个系列被读取,但发布一些示例数据将澄清这一点。 -
我相信
glob.glob('.txt')正在返回一个空列表。我相信你想要glob.glob('*.txt') -
@Alexander 对不起,错字
-
@ThomasTu 如何从以“文件名”为列的系列列表转到数据框?我认为这就是问题所在---我不明白这一点
标签: python pandas dataframe series