Python Pandas columns.get_loc with itertuples

gg0vcinb  于 2024-01-04  发布在  Python
关注(0)|答案(1)|浏览(122)

在下面的代码中,我尝试在'value'列中找到正值时简单地打印1。
但是,我得到一个错误“TypeError:'>=' not supported between instances of 'Timestamp' and 'int'”。
这是因为行对象中有一个索引列。
其中df.columns.get_loc(“value 1 ~~”)为df返回1,这是正确的,但不是正确的行对象的列索引。
那么,这样做的正确语法是什么呢?

import pandas as pd
from datetime import datetime

# Sample data
data = {    
    'datetime': [
        datetime(2023, 11, 11, 8, 0, 0),
        datetime(2023, 11, 11, 8, 5, 0),
        datetime(2023, 11, 11, 8, 10, 0),
        datetime(2023, 11, 11, 8, 15, 0),
        datetime(2023, 11, 11, 8, 20, 0),
        datetime(2023, 11, 11, 8, 25, 0),
        datetime(2023, 11, 11, 8, 30, 0),
        datetime(2023, 11, 11, 8, 35, 0),
        datetime(2023, 11, 11, 8, 40, 0),
        datetime(2023, 11, 11, 8, 45, 0),
        datetime(2023, 11, 11, 8, 50, 0),
    ],
    'value 1 ~~': [1,  3, 1, 0, -1, 1, 0, 2, -3, 0, -3],                   
}

# Create the DataFrame
df = pd.DataFrame(data)

for row in df.itertuples(index=True):

    print(row.Index)    
    if row[df.columns.get_loc("value 1 ~~")] >= 0:
        print(1)

字符串
注:我不想做

if row[df.columns.get_loc("value 1 ~~")+1] >= 0:

更新时间2023/12/15 15:20

row._ _ getattribute _ _(“value 1 ~~”)也不起作用。

disho6za

disho6za1#

您正在索引row,其中包括df的索引作为列,列的位置在df中,其中不包括索引作为列。因此:
row中的col索引0表示df中的索引col
row中的col索引1表示df中的日期时间col
row中的col索引2表示df中的值~~1 col
如果value ~~ 1总是你的最后一列,那么像这样的东西可能是一个快速的解决方案:

for row in df.itertuples(index=True): 
    if row[-1] >= 0:
        print(1)

字符串
正如其他人建议的那样,最好将代码更改为iterrows,同时更改列名,因为解释器不喜欢value ~~1

相关问题