[英]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
。 所以我為File1
和File2
dict1
和dict2
寫了一個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.