【发布时间】:2020-03-23 17:58:15
【问题描述】:
我有 120 个 .csv 文件。包括IndexNo、日期、EArray、温度等。
这里的索引列从 1 到 8760 不等。 我想从文件夹中读取所有 csv 文件并将它们合并到单个文件中。 合并这些文件后,我将拥有所有 IndexNo 120 次(即 IndexNo 1 将有 120 行)。
在此之后,我必须为每个 IndexNo(即 IndexNo 1 到 8760)找到 EArray 的最大值并打印该最大 EArray 值行。
import pandas , OS,
glob path = r'C:\Data_Input' # use your path
all_files = glob.glob(path + "/*.csv")
# print(all_files)
li = []
for filename in all_files:
df = pd.read_csv(filename, skiprows=10, names=None, engine='python',header=0, encoding='unicode_escape')
df = df.assign(File_name=os.path.basename(filename).split('.')[0])
li.append(df)
frame = pd.concat(li, axis=0, ignore_index=True, sort=False)
frame = frame.dropna()
df = frame.assign(max_EArray=frame.groupby('IndexNo')['EArray'].transform('max')) df_filtered = df[df['EArray'] == df['max_EArray']]
output = df_filtered.loc[df_filtered.ne(0).all(axis=1)]('max_EArray', axis=1) print(output.shape)
output.to_csv('temp.csv')
【问题讨论】:
-
为了让社区帮助你,你需要证明你已经尝试构建一些代码。因此,请发布您提出的解决方案的代码,并让我们知道您到底在哪里遇到问题。那么社区也许可以提供帮助。
-
import pandas , OS, glob path = r'C:\Data_Input' # 使用你的路径 all_files = glob.glob(path + "/*.csv") # print(all_files) li = [ ] 对于 all_files 中的文件名:df = pd.read_csv(filename, skiprows=10, names=None, engine='python',header=0, encoding='unicode_escape') df = df.assign(File_name=os.path. basename(文件名).split('.')[0]) li.append(df) frame = pd.concat(li, axis=0, ignore_index=True, sort=False)
-
frame = frame.dropna() df = frame.assign(max_EArray=frame.groupby('IndexNo')['EArray'].transform('max')) df_filtered = df[df[ 'EArray'] == df['max_EArray']] 输出 = df_filtered.loc[df_filtered.ne(0).all(axis=1)]('max_EArray', axis=1) print(output.shape) 输出。 to_csv('temp.csv')
标签: python pandas dataframe join concatenation