我想讀取多個 .csv 檔案并將其檔案名的日期時間部分附加到列標題。每個 csv 檔案都包含在特定日期時間獲取的資料。每個檔案名具有以下格式:
yyyy-mm-dd_hh-mm-ss_someothertext
每個檔案只包含一列資料。
我成功地將多個檔案作為資料幀串列匯入,如下所示:
import pandas as pd
import glob
path = r'C:\Users\...' #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=1, ignore_index=True)
但是,這是我丟失檔案名資訊的地方。列標題現在只是一系列數字。我的問題是:如何將每個檔案名的日期時間部分附加到frame.
我得到的最接近的是能夠通過轉置以迂回的方式附加整個檔案名,而不僅僅是日期時間部分frame,將整個檔案名添加為新列,轉回,然后將檔案名行設定為標題行.. .
import os
frame=pd.DataFrame.transpose(frame)
frame['filename'] = os.path.basename(filename)
frame=pd.DataFrame.transpose(frame)
frame.reset_index(drop=True)
frame.columns = frame.iloc[6628] #row 6628 is where the row with the filenames ends up after transposing
這似乎非常低效,最終以整個檔案名作為標題,而不僅僅是日期時間部分。
uj5u.com熱心網友回復:
這將是我建議的方法,壓縮 DataFrame 并使用 Regex:
import re
import os
import glob
import pandas as pd
path = 'C:\Users\....'
files = glob.glob(f'{path}\*.csv')
li = []
for file in files:
name = os.path.basename(file) # get filename
date = re.search(r'\d{4}-\d{2}-\d{2}', name).group(0) # extract yyyy-mm-dd from filename
# read file, squeeze to Series, rename to date
li.append(pd.read_csv(file, index_col=None, header=0, squeeze=True).rename(date))
frame = pd.concat(li, axis=1, ignore_index=False)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/313698.html
上一篇:將時間從日期時間行轉換為列
