在PythonDataFrame中,如果未拾取任何值,如何将值留空?
我的代码的功能是从已知值中拾取特定公差100ppm公差范围内的值 要拾取的数据如下所示:在PythonDataFrame中,如果未拾取任何值,如何将值留空?,python,dataframe,Python,Dataframe,我的代码的功能是从已知值中拾取特定公差100ppm公差范围内的值 要拾取的数据如下所示: col1 col2 1000 10000 1050 20000 2000 30000 以此类推,最多400行。下面是从拾取列表中拾取类似于col1的值的代码部分: for files in file_list: df = pd.read_csv(files, engine='python') matches = pd.DataFrame(index=
col1 col2
1000 10000
1050 20000
2000 30000
以此类推,最多400行。下面是从拾取列表中拾取类似于col1的值的代码部分:
for files in file_list:
df = pd.read_csv(files, engine='python')
matches = pd.DataFrame(index=pickuplist['mass'],
columns=df.set_index(list(df.columns)).index,
dtype=bool)
for index, exp_mass, intensity in df.itertuples():
matches[exp_mass] = abs(matches.index - exp_mass)/matches.index < ppm/1e6
if (len(matches[exp_mass])== 0):
matches[exp_mass] = None
results3 = matches.any().reset_index(name='a')[matches.any().values]
运行时的当前代码不会拾取所需值并将其输出为:
col1 col2
1000.04 10000
1050.02 20000
2000.04 30000
但是,如果没有人捡起,我想留下空白。例如,如果拾取列表包含col1中的值1647.58,且数据中没有任何值在100 ppm公差1647.58范围内,则该1647.58的匹配数据帧将为空空间:
col1 col2
1000.04 10000
1050.02 20000
2000.04 30000
if (len(matches[exp_mass])== 0):
matches[exp_mass] = None
我原以为上面的部分会奏效,但我想我错了。如有任何建议,将不胜感激。谢谢 我认为发生的情况是,您试图在迭代python中更新变量。这在python中是不可能的,请查看解释,但假设您有此代码
import pandas as pd
import numpy as np
df = pd.DataFrame(np.array([[1000.04, 1000], [1050.02, 2000], [2000.04, 3000]]), columns=('col1', 'col2'))
for index, row in df.iterrows():
if row['col1'] == 1000.04:
row['col1'] == np.nan
print(df)
您可能会认为这会改变第一行的值,但是如果执行它,您会发现这不会发生。
要更改数据帧,您需要进行如下更改:
df.loc[df['col1'] == 1000.04, ['col1', 'col2']] = np.nan
print(df)
df.loc[df['col1'] == 1000.04, ['col1', 'col2']] = np.nan
print(df)