pandas If语句将列添加到panda Dataframe ,给出相同的值

eyh26e7m  于 2023-02-28  发布在  其他
关注(0)|答案(2)|浏览(93)

我想添加一个名为我有一个名为week5_233C的panda Dataframe 的新列,我的Python版本是3.19.13。
我编写了一个if语句来向数据集中添加一个新列:Spike。如果Value [pV]中的值不等于0,我想在该行中添加1。如果Value [pV]为0,我想在spike列中添加0。
数据如下所示:

TimeStamp [µs]  Value [pV]  
0        1906200         0   
1        1906300         0  
2        1906400         0     
3        1906500    -149012   
4        1906600    -149012

我希望它看起来像这样:

TimeStamp [µs]  Value [pV]  Spike
0        1906200         0      0
1        1906300         0      0
2        1906400         0      0
3        1906500    -149012     1
4        1906600    -149012     1

我试过:

week5_233C.loc[week5_233C[' Value [pV]'] != 0, 'Spike'] = 1 
week5_233C.loc[week5_233C[' Value [pV]'] == 0, 'Spike'] = 0

但是列Spike中的所有行得到相同的值。
我也试过:

week5_233C['Spike'] = week5_233C[' Value [pV]'].apply(lambda x: 0 if x == 0 else 1)

同样,它只添加0或1,但不适用于ifelse

TimeStamp [µs]  Value [pV]  Spike
0        1906200         0      1
1        1906300         0      1
2        1906400         0      1
3        1906500    -149012     1
4        1906600    -149012     1

这样做:

for i in week5_233C[' Value [pV]']:
    if i != 0: 
        week5_233C['Spike'] = 1
    elif i == 0:
        week5_233C['Spike'] = 0

不执行任何操作:不添加列,不给出错误,并且使Python崩溃。
但是,当我运行这个if语句时,只需要一个print语句:

for i in week5_233C[' Value [pV]']:
    if i != 0: 
        print(1)
    elif i == 0:
        print(0)

然后它确实打印了我想要的确切值。我想不出如何将这些值保存在新列中。
这一点:

for i in week5_233C[' Value [pV]']:
    if i != 0:
       week5_233C.concat([1, df.iloc['Spike']]) 
    elif i == 0:
        week5_233C.concat([0, df.iloc['Spike']])

给我一个错误:AttributeError: 'DataFrame' object has no attribute 'concat'
如何创建一个新列Spike,并根据列Value [pV]中的值将值0和1相加?

n3ipq98p

n3ipq98p1#

我认为你应该检查Value [pV]列的数据类型。你可能有字符串,这就是为什么你有相同的值。尝试print(df['Value [pV]'].dtype)。如果object尝试转换为astype(float)pd.to_numeric(df['Value [pV]'])
您也可以尝试:

df['spike'] = np.where(df['Value [pV]'] == '0', 0, 1)
    • 更新**

要显示坏行并调试数据名,请使用以下代码:

df.loc[pd.to_numeric(df['Value [pV]'], errors='coerce').isna(), 'Value [pV]']
jdgnovmf

jdgnovmf2#

import pandas as pd

df = pd.DataFrame({'TimeStamp [µs]':[1906200, 1906300, 1906400, 1906500, 1906600],
                   'Value [pV] ':[0, 0, 0, -149012, -149012],
                   })


df['Spike'] = df.agg({'Value [pV] ': lambda v: int(bool(v))})

print(df)
TimeStamp [µs]  Value [pV]   Spike
0         1906200            0      0
1         1906300            0      0
2         1906400            0      0
3         1906500      -149012      1
4         1906600      -149012      1

相关问题