我是编码新手,并尝试从大文件中提取数据子集。
File_1包含两列中的数据:ID
和Values
。
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文件。 一旦我得到代码,我也不知道如何将提取的数据写入新文件。 谢谢你的帮助。
答案 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')