我有多個具有相同列標題的 CSV 檔案,如下所示:
| Date & Time | Rain | Flow |
| --------------------- | ----- | ---------- |
| 3/19/2018 12:00 | 0 | 0.51 |
| 3/19/2018 13:00 | 2 | 0.51 |
...
我想從每個 CSV 中獲取“流”列,并根據日期將它們并排放置。我面臨的問題是每個 CSV 的日期和時間是不同的,我想根據日期對齊列,如果我合并時該日期沒有值,我想留下一個空白空間或 NaN
我創建了一個新的資料框,其中包含一系列日期,其中封裝了 CSV 串列中找到的所有日期,但我無法相應地合并列。
最終的資料框看起來像
| Date & Time | CSV 1 Flow | CSV 2 Flow | CSV 3 Flow |
| --------------------- | ---------------- | ---------------- | ---------------- |
| 3/19/2018 12:00 | 0.51 | NaN | 0.34 |
| 3/19/2018 13:00 | 0.51 | NaN | 0.47 |
...
到目前為止我嘗試的看起來像:
csv_files = glob.glob(os.path.join(pwd, "*.csv"))
range = pd.date_range('2017-01-01', periods=45985, freq='H')
df_full = pd.DataFrame({'Date & Time': range})
for j in csv_files:
df_full[j]=''
df_hourly = pd.read_csv(j, usecols=['Date & Time','Flow'])
df_merged = pd.merge(df_full, df_hourly, on='Date & Time', how='left')
我得到的代碼看起來像:
range = pd.date_range('2017-01-01', periods=45985, freq='H')
df_full = pd.DataFrame({'Date & Time': range})
for filename in csv_files:
df_full[filename] = ''
df = pd.read_csv(filename,header=0, parse_dates=['Date & Time'],
usecols=['Date & Time', 'Flow'])
df_combined = pd.merge(left=df_full,right=df, on='Date & Time', how='outer')
df_combined
這給出了一個看起來像的輸出 DF
| Date & Time | CSV 1 Filepath | CSV 2 Filepath |... | - Flow- |
| --------------------- | ---------------- | ---------------- |... | ------- |
| 01/01/2017 00:00 | BLANK | BLANK |... | 0.34 |
| 01/01/2017 01:00 | BLANK | BLANK |... | 0.25 |
...
除了最后一列標有“流量”外,整個表格都是空白的。腳本似乎沒有將值放在正確的列中。
uj5u.com熱心網友回復:
嘗試這樣的事情:
df1 = pd.read_csv('example.csv', parse_dates=['Date & Time'])
df2 = pd.read_csv('example.csv', parse_dates=['Date & Time'])
df_all = df1.merge(df2, on='Date & Time', how='left')
print(df_all)
輸出:
Date & Time Rain_x Flow_x Rain_y Flow_y
0 2018-03-19 12:00:00 0 0.51 0 0.51
1 2018-03-19 13:00:00 2 0.51 2 0.51
大約您的回圈將是這樣的:
csv_files = glob.glob(os.path.join(pwd, "*.csv"))
df_all = pd.read_csv(csv_files[0], parse_dates=['Date & Time'], usecols=['Date & Time','Flow'])
for file in csv_files[1:]:
df = pd.read_csv(file, parse_dates=['Date & Time'], usecols=['Date & Time','Flow'])
df_all = df_all.merge(df, on='Date & Time', how='left')
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/466581.html
