簡體   English   中英

合並不同長度的 .csv 文件中的行(python 3.x)

[英]Merging rows from .csv files with different lengths (python 3.x)

File1:

2015-01-01 07:00     1    1    1    1
2015-01-01 07:01     1    1    1
2015-01-01 07:02     1    1    1    1

File2:

2015-01-01 07:00     2    2 
2015-01-01 07:01     2    2
2015-01-01 07:02     2    2

考慮到每一行的時間戳,我想將File1 File2 所以我為File1File2 dict1dict2寫了一個dictionary ,其中k = Timestamp 和v = values。 我的代碼如下所示:

merged_files = {d1k: d1v+File2Dic.get(d1k[:],[]) for d1k,d1v in File1Dic.items()}

這讓我得到一個輸出: merged_files

2015-01-01 07:00     1    1    1    1    2    2
2015-01-01 07:01     1    1    1    2    2
2015-01-01 07:02     1    1    1    1    2    2

而且我要:

2015-01-01 07:00     1    1    1    1    2    2
2015-01-01 07:01     1    1    1         2    2
2015-01-01 07:02     1    1    1    1    2    2

關於如何調整合並代碼以獲得該結果的任何想法。

您可以使用 pandas 函數合並,然后用空字符串填充NaN值。

您可以通過函數to_csv將結果寫入 csv。

解釋一下,為什么在第 4 列中是1.0而不是1
因為NaN值被轉換為 float64。 關聯

import pandas as pd
import numpy as np
import io

temp=u"""2015-01-01 07:00;1;1;1;1
2015-01-01 07:01;1;1;1;
2015-01-01 07:02;1;1;1;1"""

df = pd.read_csv(io.StringIO(temp), sep=";", header=None)
print df

temp1=u"""2015-01-01 07:00;2;2 
2015-01-01 07:01;2;2
2015-01-01 07:02;2;2"""

df1 = pd.read_csv(io.StringIO(temp1), sep=";", header=None)
print df1

#merge by first column - by dates
result = pd.merge(df, df1, on=0)
#fill NaN values by empty string
result = result.fillna('')
print result
#                  0  1_x  2_x  3  4  1_y  2_y
#0  2015-01-01 07:00    1    1  1  1    2    2
#1  2015-01-01 07:01    1    1  1       2    2
#2  2015-01-01 07:02    1    1  1  1    2    2

print result.to_csv(header=False, index=False)
#2015-01-01 07:00,1,1,1,1.0,2,2
#2015-01-01 07:01,1,1,1,,2,2
#2015-01-01 07:02,1,1,1,1.0,2,2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM