Python 读取特定文件夹中的所有csv文件,合并它们,并找到w.r.t.行间隔的最大值
我有120个csv文件。它包括索引号、日期、日期、温度等 这里的索引列从1到8760不等。 我想从文件夹中读取所有csv文件,并将它们合并到单个文件中。 一旦我合并了这些文件,我将拥有所有索引No 120次,I.e索引No 1将拥有120行 在此之后,我必须为每个索引编号找到耳环的最大值,即索引编号1到8760,并打印该最大耳环值行Python 读取特定文件夹中的所有csv文件,合并它们,并找到w.r.t.行间隔的最大值,python,pandas,dataframe,join,concatenation,Python,Pandas,Dataframe,Join,Concatenation,我有120个csv文件。它包括索引号、日期、日期、温度等 这里的索引列从1到8760不等。 我想从文件夹中读取所有csv文件,并将它们合并到单个文件中。 一旦我合并了这些文件,我将拥有所有索引No 120次,I.e索引No 1将拥有120行 在此之后,我必须为每个索引编号找到耳环的最大值,即索引编号1到8760,并打印该最大耳环值行 import pandas , OS, glob path = r'C:\Data_Input' # use your path all_files = glo
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')
您的任务可以很容易地完成使用dask而不是纯熊猫 一个优点是,开箱即用,您有可能获得 已从中读取特定行的源文件的名称 我的解决办法如下: 如果尚未安装dask,请安装dask 导入dask.dataframe: 定义一个函数来重新格式化在上单独调用的数据帧 从特定.csv文件读取的每个部分数据帧: 在这里,您可以使用普通代码。它也改变了道路, 剥离目录路径,只保留不带扩展名的文件名 定义一个函数以在分组后从每个组中获取最大行数 按索引编号: 运行实际处理:
ddf = dd.read_csv('EArray/*.csv', include_path_column=True)
ddf = ddf.map_partitions(reformat)
ddf = ddf.groupby('IndexNo').apply(getMax, meta={'EArray': 'i4', 'path': 'O'})
df = ddf.compute().sort_index().reset_index()
说明:
“array/*.csv”-一组源文件的规范。
我将所有源文件放在一个专用的子文件夹array中。
include_path_column=True-将路径列添加到数据帧,其中包含
每行读取的文件的完整路径。
映射分区…-分别对每个
部分数据帧。
群比。。。并申请…-一般来说,就像熊猫一样。
meta-dask名称规范中需要的附加参数
以及输出数据帧中的列类型。
计算-运行由前面的指令准备的处理树。
现在,结果是正常的数据帧。
排序索引和重置索引-对计算结果执行操作。
对于测试,我准备了3.csv文件,每个文件有10行:
T1.csv:
IndexNo date EArray
0 1001 2019-01-01 20
1 1002 2019-01-02 20
2 1003 2019-01-03 20
3 1004 2019-01-04 20
4 1005 2019-01-05 20
5 1006 2019-01-06 20
6 1007 2019-01-07 20
7 1008 2019-01-08 20
8 1009 2019-01-09 20
9 1010 2019-01-10 20
T2.csv:
IndexNo date EArray
0 1001 2019-01-11 22
1 1002 2019-01-12 23
2 1003 2019-01-13 24
3 1004 2019-01-14 25
4 1005 2019-01-15 26
5 1006 2019-01-16 27
6 1007 2019-01-17 28
7 1008 2019-01-18 29
8 1009 2019-01-19 30
9 1010 2019-01-20 31
T3.csv:
IndexNo date EArray
0 1001 2019-01-21 35
1 1002 2019-01-22 34
2 1003 2019-01-23 33
3 1004 2019-01-24 32
4 1005 2019-01-25 31
5 1006 2019-01-26 30
6 1007 2019-01-27 29
7 1008 2019-01-28 28
8 1009 2019-01-29 28
9 1010 2019-01-30 26
我的计划的结果是:
IndexNo EArray path
0 1001 35 T3
1 1002 34 T3
2 1003 33 T3
3 1004 32 T3
4 1005 31 T3
5 1006 30 T3
6 1007 29 T3
7 1008 29 T2
8 1009 30 T2
9 1010 31 T2
例如,对于IndexNo==1001,ARRAY的值为:
20、22和35 foreach输入文件
IndexNo==1001的结果包含:
耳环==35-上述3项中的最大值,
T3-包含max行的源文件。
我知道你必须学习dask,但在我看来
为此付出一些努力是值得的
请注意,我的代码非常清晰简洁。
函数只有7行,主程序只有4行。为了让社区帮助您,您需要表明您已经尝试构建了一些代码。因此,请发布您提出的解决方案的代码,并让我们知道您的具体问题所在。然后社区可能能够提供帮助。导入pandas,OS,glob path=r'C:\Data\u Input“使用您的路径所有\u文件=glob.globpath+/*.csv printall\u文件li=[]作为所有\u文件中的文件名:df=pd.read\u csvfilename,skiprows=10,name=None,engine='python',header=0,encoding='unicode\u escape'df=df.assignFile\u name=os.path.basenamefilename.split'.[0]li.appenddf frame=pd.concatli,axis=0,ignore\u index=True,sort=false frame=frame.dropna df=frame.assignmax\u array=frame.groupby'IndexNo'['array'.]转换'max'df\u filtered=df[df['array']==df['max\u array']]输出=df\u filtered.loc[df_filtered.ne0.allaxis=1]'max_array',axis=1 printoutput.shape output.to_csv'temp.csv'非常感谢您,此程序运行良好。@Valdi_-Bo
IndexNo date EArray
0 1001 2019-01-11 22
1 1002 2019-01-12 23
2 1003 2019-01-13 24
3 1004 2019-01-14 25
4 1005 2019-01-15 26
5 1006 2019-01-16 27
6 1007 2019-01-17 28
7 1008 2019-01-18 29
8 1009 2019-01-19 30
9 1010 2019-01-20 31
IndexNo date EArray
0 1001 2019-01-21 35
1 1002 2019-01-22 34
2 1003 2019-01-23 33
3 1004 2019-01-24 32
4 1005 2019-01-25 31
5 1006 2019-01-26 30
6 1007 2019-01-27 29
7 1008 2019-01-28 28
8 1009 2019-01-29 28
9 1010 2019-01-30 26
IndexNo EArray path
0 1001 35 T3
1 1002 34 T3
2 1003 33 T3
3 1004 32 T3
4 1005 31 T3
5 1006 30 T3
6 1007 29 T3
7 1008 29 T2
8 1009 30 T2
9 1010 31 T2