Pandas:关于如何设计数据框和附加多个 csv 文件的想法
Pandas: Ideas on how to design dataframe and append multiple csv files
大家好,我是 pandas、
的新手
我有一组非常不方便的 csv 数据,如下所示:
PMSN01001_PFT0_20181212_Crop_AGE.jpg_OCR.csv
PMSN01001_PFT0_20181212_Crop_GENDER.jpg_OCR.csv
PMSN01001_PFT0_20181212_Crop_HEIGHT.jpg_OCR.csv
PMSN01001_PFT0_20181212_Crop_WEIGHT.jpg_OCR.csv
...
PMSN01002_PFT0_20181212_Crop_AGE.jpg_OCR.csv
PMSN01002_PFT0_20181212_Crop_GENDER.jpg_OCR.csv
PMSN01002_PFT0_20181212_Crop_HEIGHT.jpg_OCR.csv
PMSN01002_PFT0_20181212_Crop_WEIGHT.jpg_OCR.csv
...
每个 csv 文件都有一个简单的单个字符串或数字,如下所示:
PMSN01001*AGE*.csv 54
PMSN01001*GENDER*.csv male
PMSN01001*HEIGHT*.csv 171
PMSN01001*WEIGHT*.csv 65.4
PMSN01002*AGE*.csv 45
PMSN01002*GENDER*.csv female
PMSN01002*HEIGHT*.csv 141
PMSN01002*WEIGHT*.csv 87
基本上,我想让整个数据框看起来像这样,其中文件名相应地显示为行,值显示为列:
age gender height weight
PMSN*.csv 54 male 171 65.4
PMSN*.csv 52 female 181 54
我怎样才能做到这一点?
我认为关键的想法是制作一个空数据框,然后使用 glob.glob() 读取所有 csv 文件,并以某种方式使用 open() 将每个文件名视为 rows.但我要在这里兜圈子...
csv_path = \mypath\
filenames = glob.glob(csv_path + '\*.csv')
非常感谢!!
您可以使用下面的代码,其中header=0表示读取CSV后第一行可以指定为列名。
import pandas as pd
import glob
path = r'C:\DRO\DCL_rawdata_files' # use your path
all_files = glob.glob(path + "/*.csv")
li = []
for filename in all_files:
df = pd.read_csv(filename, index_col=None, header=0)
li.append(df)
frame = pd.concat(li, axis=0, ignore_index=True)
如果你想合并行中的数据,那么使用它
csv_file_list = ["sample1.csv", "sample2.csv"]
list_of_dataframes = []
for filename in csv_file_list:
list_of_dataframes.append(pd.read_csv(filename))
merged_df = pd.concat(list_of_dataframes)
print(merged_df)
大家好,我是 pandas、
的新手我有一组非常不方便的 csv 数据,如下所示:
PMSN01001_PFT0_20181212_Crop_AGE.jpg_OCR.csv
PMSN01001_PFT0_20181212_Crop_GENDER.jpg_OCR.csv
PMSN01001_PFT0_20181212_Crop_HEIGHT.jpg_OCR.csv
PMSN01001_PFT0_20181212_Crop_WEIGHT.jpg_OCR.csv
...
PMSN01002_PFT0_20181212_Crop_AGE.jpg_OCR.csv
PMSN01002_PFT0_20181212_Crop_GENDER.jpg_OCR.csv
PMSN01002_PFT0_20181212_Crop_HEIGHT.jpg_OCR.csv
PMSN01002_PFT0_20181212_Crop_WEIGHT.jpg_OCR.csv
...
每个 csv 文件都有一个简单的单个字符串或数字,如下所示:
PMSN01001*AGE*.csv 54
PMSN01001*GENDER*.csv male
PMSN01001*HEIGHT*.csv 171
PMSN01001*WEIGHT*.csv 65.4
PMSN01002*AGE*.csv 45
PMSN01002*GENDER*.csv female
PMSN01002*HEIGHT*.csv 141
PMSN01002*WEIGHT*.csv 87
基本上,我想让整个数据框看起来像这样,其中文件名相应地显示为行,值显示为列:
age gender height weight
PMSN*.csv 54 male 171 65.4
PMSN*.csv 52 female 181 54
我怎样才能做到这一点?
我认为关键的想法是制作一个空数据框,然后使用 glob.glob() 读取所有 csv 文件,并以某种方式使用 open() 将每个文件名视为 rows.但我要在这里兜圈子...
csv_path = \mypath\
filenames = glob.glob(csv_path + '\*.csv')
非常感谢!!
您可以使用下面的代码,其中header=0表示读取CSV后第一行可以指定为列名。
import pandas as pd
import glob
path = r'C:\DRO\DCL_rawdata_files' # use your path
all_files = glob.glob(path + "/*.csv")
li = []
for filename in all_files:
df = pd.read_csv(filename, index_col=None, header=0)
li.append(df)
frame = pd.concat(li, axis=0, ignore_index=True)
如果你想合并行中的数据,那么使用它
csv_file_list = ["sample1.csv", "sample2.csv"]
list_of_dataframes = []
for filename in csv_file_list:
list_of_dataframes.append(pd.read_csv(filename))
merged_df = pd.concat(list_of_dataframes)
print(merged_df)