Python:使用第二个文件中的ID从一个文件中提取数据值

时间:2016-04-09 02:32:07

标签: python python-2.7 pandas

我是编码新手,并尝试从大文件中提取数据子集。 File_1包含两列中的数据:IDValues。 File_2包含大量ID,其中一些可能存在于File_1中,而其他ID则不存在。 如果File_1中存在来自File_2的ID,我想提取这些值并将ID和值写入新文件,但我不知道如何执行此操作。以下是文件示例:

File_1:data.csv

ID                                 Values
HOT224_1_0025m_c100047_1            16
HOT224_1_0025m_c10004_1              3
HOT224_1_0025m_c100061_1             1
HOT224_1_0025m_c10010_2              1
HOT224_1_0025m_c10020_1              1

File_2:ID.xlsx

IDs
HOT224_1_0025m_c100047_1
HOT224_1_0025m_c100061_1
HOT225_1_0025m_c100547_1
HOT225_1_0025m_c100561_1

我尝试了以下内容:

import pandas as pd
data_file = pd.read_csv('data.csv', index_col = 0)
ID_file = pd.read_excel('ID.xlsx')
values_from_ID = data_file.loc[['ID_file']]

发生以下错误:

KeyError: "None of [['ID_file']] are in the [index]"

不确定我是否正确阅读了excel文件。 一旦我得到代码,我也不知道如何将提取的数据写入新文件。 谢谢你的帮助。

3 个答案:

答案 0 :(得分:0)

用熊猫:

import pandas as pd
data_file = pd.read_csv('data.csv', index_col=0, delim_whitespace=True)
ID_file = pd.read_excel('ID.xlsx', index_col=0)
res = data_file.loc[ID_file.index].dropna()
res.to_csv('result.csv')

result.csv的内容:

IDs,Values
HOT224_1_0025m_c100047_1,16.0
HOT224_1_0025m_c100061_1,1.0

步骤:

您需要以空格分隔的方式读取您的csv:

data_file = pd.read_csv('data.csv', index_col=0, delim_whitespace=True)

它看起来像这样:

>>> data_file
                          Values
ID                              
HOT224_1_0025m_c100047_1      16
HOT224_1_0025m_c10004_1        3
HOT224_1_0025m_c100061_1       1
HOT224_1_0025m_c10010_2        1
HOT224_1_0025m_c10020_1        1

现在,使用ID作为索引读取您的Excel文件:

ID_file = pd.read_excel('ID.xlsx', index_col=0)

并将其索引与loc一起使用,以获取第一个数据帧中的匹配条目。使用dropna()删除缺失的值:

res = data_file.loc[ID_file.index].dropna()

最后,写入结果csv:

res.to_csv('result.csv')

答案 1 :(得分:0)

我也是python编程的新手。所以我在下面使用的代码可能不是最有效的。我假设的情况是在id.csv中找到data.csv中的id,data.csv中可能有一些id不在id.csv中,反之亦然。

import pandas as pd
data = pd.read_csv('data.csv')
id2 = pd.read_csv('id.csv')
data.ID = data['ID']
id2.ID = idd['IDs']
d=[]
for row in data.ID:
    d.append(row)
f=[]
for row in id2.ID:
    f.append(row)
g=[]
for i in d:
    if i in f:
        g.append(i)
data = pd.read_csv('data.csv',index_col='ID')
new_data = data.loc[g,:]
new_data.to_csv('new_data.csv')

答案 2 :(得分:0)

这是我最终使用的代码。它工作得很好。感谢大家的回复。

import pandas as pd
data_file = pd.read_csv('data.csv', index_col=0)
ID_file = pd.read_excel('ID.xlsx', index_col=0)
res = data_file.loc[ID_file.index].dropna()
res.to_csv('result.csv')