Python 如果每一行有多个数据要处理,如何迭代某一列下的行?
我在excel文件中有这样的数据,我使用pandas将其导入到我的程序中: 我需要迭代“IPC”列中每一行的每一个数据,并按它们的前4个字符进行计数(例如A61K038/51=>A61K)。但大多数行包含不止一个数据,它们之间用分号分隔 我的想法是先对行进行迭代,然后再对行的数据进行迭代。我知道如何在其他数据类型中做这些事情,但我对pandas不熟悉,pandas dataframe使事情变得更加复杂!请帮忙!如果您能提供任何关于最佳方法的指导,我们将不胜感激 编辑:前20行Python 如果每一行有多个数据要处理,如何迭代某一列下的行?,python,pandas,Python,Pandas,我在excel文件中有这样的数据,我使用pandas将其导入到我的程序中: 我需要迭代“IPC”列中每一行的每一个数据,并按它们的前4个字符进行计数(例如A61K038/51=>A61K)。但大多数行包含不止一个数据,它们之间用分号分隔 我的想法是先对行进行迭代,然后再对行的数据进行迭代。我知道如何在其他数据类型中做这些事情,但我对pandas不熟悉,pandas dataframe使事情变得更加复杂!请帮忙!如果您能提供任何关于最佳方法的指导,我们将不胜感激 编辑:前20行
Company Name ... IPC
0 Phoenix Pharmacologics Inc ... A61K038/51;A61K038/21;A61K031/7076;A61K031/707...
1 Phoenix Pharmacologics Inc ... A61K038/46;C12N009/80
2 Phoenix Pharmacologics Inc ... A61K038/43
3 Phoenix Pharmacologics Inc ... A61K038/50;A61K045/06;A61K047/48
4 Phoenix Pharmacologics Inc ... A61K038/44;C12N009/06
5 Phoenix Pharmacologics Inc ... C07K014/525;C12N009/78;C12N015/81
6 Phoenix Pharmacologics Inc ... A61K038/00;C12N009/06
7 Phoenix Pharmacologics Inc ... C12Q001/68
8 Phoenix Pharmacologics Inc ... A61K038/50;C12N009/78
9 Phoenix Pharmacologics Inc ... C12N011/06;C12N009/96;C12N009/06;A61K038/44
10 Phoenix Pharmacologics Inc ... C12N009/14
11 Phoenix Pharmacologics Inc ... C12N011/06;C12N009/06;C12N009/96;C12N011/08
12 Phoenix Pharmacologics Inc ... A61K038/00;A61K047/48;C12N009/78;C12N009/96
13 Phoenix Pharmacologics Inc ... A61K038/00;C07K014/525
14 Phytoceutica, Inc ... A61K036/539;A61P035/00;A61K036/484;A61K036/725...
15 Phytoceutica, Inc ... A01N065/00
16 Phytoceutica, Inc ... A61K036/00
17 Phytoceutica, Inc ... G01N033/48;G06F017/00
18 Phytoceutica, Inc ... C12Q001/68;C12Q001/68;G06F019/00;G06F019/00
19 Phytoceutica, Inc ... G06F019/00
如果要根据前4个字符计算元素,可以定义一个函数来完成此操作,然后将其应用于数据帧,如下所示:
import numpy as np
df = pd.DataFrame({'IPC': ['A61K038/52;A61K038/21', 'A61K038/46;C12N009/80']})
def count_ipc(ipc):
items = ipc.split(';')
items = [val[:4] for val in items] # extract first 4 elements
values = np.unique(items) # count unique elements with numpy
return len(items)
df['cnt'] = df.apply(lambda row: count_ipc(row['IPC']), axis=1)
结果是:
IPC cnt
0 A61K038/52;A61K038/21 1
1 A61K038/46;C12N009/80 2
您可以使用pandas并将其链接到它以获得结果:
示例数据
# Example dataframe
df = pd.DataFrame({'IPC':['A61K038/51;A61K038/21;A61k031', 'A80934;A758392']})
print(df)
IPC
0 A61K038/51;A61K038/21;A61k031
1 A80934;A758392
应用拆分和len
df['count'] = df.IPC.str.split(';').str.len()
print(df)
IPC count
0 A61K038/51;A61K038/21;A61k031 3
1 A80934;A758392 2
一个是lambda
df = pd.DataFrame({'IPC': ['A61K038/52;A61K038/21;A61K038', 'A61K038/46;C12N009/80']})
def counter(ipc):
temp = ipc.split(';')
first_4 = temp[0][:4]
return sum(1 for i in temp if i.startswith(first_4) )
df['cnt']= df['IPC'].apply(counter)
输出
IPC cnt
0 A61K038/52;A61K038/21;A61K038 3
1 A61K038/46;C12N009/80 1
嗨,谢谢你马上回复!对不起,我忘了说我需要按它们的前4个字符数一数。例如,A61K038/51;A61K038/21;A61K031/7076;全部变成A61K,我必须计算A61K的数量。代码可以在我的程序中运行,但不能正确计算IPC。嗨,谢谢你的回复!对不起,我忘了说我需要按它们的前4个字符数一数。例如,A61K038/51;A61K038/21;C01K031/7076;成为A61K和C01K,我必须分别计算A61K和C01K的数量。每行?或者通过整列?我需要计算在整列中有多少类型的IPC(例如type=A61K、C01K等),并计算a公司每种类型有多少IPC(例如a公司有4个A61K、2C01K)。您能在问题中添加前20行吗?使用:
打印(测向头(20))
。您可以通过编辑将输出复制并粘贴到问题中。我添加了前20行。您好,谢谢您的回复!据我所见,你的代码只计算A61K?