我已经阅读了熊猫教程,仍然需要帮助。 我是熊猫的新手,所以请多多包涵。
我有一个如下所示的csv:
#1
identifier1, identifier2,
1.1 , 1.2
2.3 , 4.4
和一个像这样的字典:
dict = {'identifier1':'3.3', 'identifier2':'2.3', 'identifier3':'1.6'}
我想用此字典更新此csv,以便将具有相同标识符的列附加到其中,并为新标识符创建一个列。
#2
identifier1, identifier2, identifier3
1.1 , 1.2 , 1.6
2.3 , 4.4 , NaN
3.3 , 2.3 , NaN
这将是此csv的重复更新,因此将来此过程将类似于:
dict = {'identifier2':'3.5', 'identifier4':'1.5'}
INSERT MERGE CODE HERE
#3
identifier1, identifier2, identifier3, identifier4
1.1 , 1.2 , 1.6 , 1.5
2.3 , 4.4 , NaN , NaN
3.3 , 2.3 , NaN , NaN
NaN , 3.5 , NaN , NaN
追加有效,但不是我想要的方式,它给了我
dict = {'identifier2':'3.5', 'identifier4':'1.5'}
new_df = pandas.Dataframe.from_dict(dict, orient='columns')
old_df.append(new_df, True)
#4
identifier1, identifier2, identifier3, identifier4
1.1 , 1.2 , 1.6 , NaN
2.3 , 4.4 , NaN , NaN
3.3 , 2.3 , NaN , NaN
NaN , 3.5 , NaN , 1.5
因此,在创建新列时,我需要将值放在第一行中。像#2或#3
.merge(old_df, new_df, how='left')
为我提供了旧数据帧#2和旧数据帧索引串联在一起的情况。
identifier1, identifier2, identifier3, identifier1, identifier2, identifier3,
1.1 , 1.2 , 1.6
2.3 , 4.4 , NaN
3.3 , 2.3 , NaN
&
.merge(old_df, new_df, how='right')
.merge(old_df, new_df, how='outer')
.merge(old_df, new_df, how='inner')
要么返回我的原始数据帧,要么返回与我想要的数据不符的东西,例如删除索引下的所有行。
感谢您阅读这篇长篇文章,如果您有任何疑问,请将其留在下面,我会尽力澄清任何歧义。
答案 0 :(得分:0)
根据给定的数据创建一个数据框并设置列名称:
id1 = [1.1, 2.3, 3.3]
id2 = [1.2, 4.4, 2.3]
id3 = [1.6]
DF = pd.DataFrame([id1, id2, id3]).T
DF.columns = ['id1', 'id2', 'id3']
为要添加到数据框中的新数据定义一个新数据框:
dict1 = {'id2':'3.5', 'id4':'1.5'}
New_DF = pd.DataFrame.from_dict([dict1])
标识两个数据框中的列名称:
Intersection = list(set(DF.columns).intersection(New_DF.columns))
标识了仅在新数据框中的列名称:
Difference = list(set(New_DF.columns) - set(DF.columns))
将两个数据框中的列按行串联:
Final_DF = pd.concat([DF, New_DF[Intersection]], axis = 0, sort = False)
重置最终数据帧的索引:
Final_DF = Final_DF.reset_index(drop = True)
将最终数据框和仅位于新数据框中的列按列连接:
Last_DF = pd.concat([Final_DF, New_DF[Difference]], axis = 1, sort = False)
希望有帮助。