我有以下数据框:
ID DBA BUILDING STREET SCORE GRADE GRADE DATE
0 50054472 LE PAIN QUOTIDIEN 395 S END AVE 9 A 2016-10-13
当我遍历行时,我想获得满足给定条件的行数:
df = pd.read_csv(CSV_URL, parse_dates=['GRADE DATE'], keep_default_na=False)
for index, row in df.iterrows():
df[(df['ID'] == row[0]) & df['GRADE DATE'] == pd.Timestamp(row[6])]
但是,我不断收到此错误:
TypeError: cannot astype a datetimelike from [datetime64[ns]] to [bool]
我了解到我正在使用Timestamp
获取parse_dates
对象,所以这就是为什么在查询之前将其转换为pd.Timestamp
的原因。对我要去哪里有任何想法吗?
答案 0 :(得分:0)
注释正确,认为df[(df['ID'] == row[0]) & df['GRADE DATE'] == pd.Timestamp(row[6])]
至少需要编辑为:df[(df['ID'] == row[0]) & (df['GRADE DATE'] == pd.Timestamp(row[6]))]
几乎总是有一种方法可以避免对熊猫使用for
循环,熊猫建议您避免for
循环。由于这似乎是纽约市健康检查数据集...
import pandas as pd
CSV_URL = 'https://data.cityofnewyork.us/api/views/43nn-pn8j/rows.csv?accessType=DOWNLOAD'
df = pd.read_csv(CSV_URL, parse_dates=['GRADE DATE'], keep_default_na=False)
def id_counter(row):
return df[(df['CAMIS'] == row[0]) & (df['GRADE DATE'] == row['GRADE DATE'])].shape[0]
df["RESULT"]=df.apply(id_counter, axis=1)
这尝试不使用for
循环就将GRADE DATE上ID(CAMIS)上的违规数量存储在RESULT中。但是从以前使用城市数据开始,我会说您的里程可能会有所不同。