在python数据帧中,如果未选择任何值,如何将值保留为空白?

时间:2019-03-11 05:15:15

标签: python dataframe

我的代码的功能是从已知值中提取一定公差(100 ppm公差)内的值。

要提取的数据如下:

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和一个空列)。取件清单如下:

col1
1000.04
1050.02
2000.04

当前代码在运行时会提取所需值并将其输出为:

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

我认为以上部分可以解决问题,但我想我错了。任何建议,将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:1)

我认为正在发生的事情是您在迭代时尝试在python中更新变量。这在python中是不可能的,请检查this以获得解释,但请简化为您有这段代码

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)