在PythonDataFrame中,如果未拾取任何值,如何将值留空?

在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=

我的代码的功能是从已知值中拾取特定公差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=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)