将列值映射到另一个csv文件的信息

时间:2018-02-22 23:55:41

标签: pandas csv dataframe plot replace

我有一个表明日期和时间的数据集。时间采用5位数格式:ddd + hm

ddd部分从2009年1月1日开始。由于数据仅从那时收集到2年,因此[min,max]将是[1,365 x 2 = 730]。

在30分钟的间隔内观察数据,每天24小时,最长时间延长至48小时。所以[min,max]为hm,[1,48]。

以下是daycode.csv文件的摘录,其中包含日期代码的ddd部分,匹配日期& hm部分日期代码,匹配时间。

I dont see the image description

我认为我同意不显示来自ISSDA的数据集。那么......我只会描述File1.txt文件中的日期代码如“' 63317'”。

This link让我瞥见了如何处理这个问题,我正在将这些代码放在一起......当然,这当然不会起作用。

consume = pd.read_csv("data/File1.txt", sep= ' ', encoding = "utf-8", names =['meter', 'daycode', 'val'])
df1= pd.read_csv("data/daycode.csv", encoding = "cp1252", names =['code', 'print'])
test = consume[consume['meter']==1048]

test['daycode'] = test['daycode'].map(df1.set_index('code')['print'])

plt.plot(test['daycode'], test['val'], '.')
plt.title('test of meter 1048')
plt.xlabel('daycode')
plt.ylabel('energy consumption [kWh]')
plt.show()

并非所有单位(数千)都在全长观察,但730 x 48是一个很大的组合,可以手工制作excel。 Tbh,不是一个优雅的解决方案,但我尝试拖动 - 它并没有得到它。

enter image description here

如果我可以读取列值的前3位数字并与另一个文件的列匹配,则使用另一列的2个最后数字,然后组合..有没有办法?

1 个答案:

答案 0 :(得分:1)

对于最后两行你可以做这样的事情

df['first_3_digits'] = df['col1'].map(lambda x: str(x)[:3])
df['last_2_digits'] = df['col1'].map(lambda x: str(x)[-2:])

for joining 2 dataframes

df3 = df.merge(df2,left_on=['first_3_digits','last_2_digits'],right_on=['col1_df2','col2_df2'],how='left')