检查pandas中是否存在行

Mes*_*zil 12 python pandas

我想检查数据帧中是否存在行,以下是我的代码:

df = pd.read_csv('dbo.Access_Stat_all.csv',error_bad_lines=False, usecols=['Name','Format','Resource_ID','Number'])
df1 = df[df['Resource_ID'] == 30957]
df1 = df1[['Format','Name','Number']]
df1 = df1.groupby(['Format','Name'], as_index=True).last()
pd.options.display.float_format = '{:,.0f}'.format
df1 = df1.unstack()
df1.columns = df1.columns.droplevel()
if 'entry' in df1:
    df2 = df1[1:4].sum(axis=0)
else:
    df2 = df1[0:3].sum(axis=0)
df2.name = 'sum'
df2 = df1.append(df2)
print(df2)
Run Code Online (Sandbox Code Playgroud)

这是输出:

Name    Apr 2013  Apr 2014  Apr 2015  Apr 2016  Apr 2017  Aug 2010  Aug 2013  
Format                                                                         

entry          0         0         0         1         4         1         0   
pdf           13        12         4        23         7         1         9   
sum           13        12         4        24        11         2         9 
Run Code Online (Sandbox Code Playgroud)

请问如果"项目"在DF2:如果"进入"存在的列只检查?我猜,情况一定是这样的.我们可以看到行'条目'存在,但我们仍然处于其他条件(如果它已经登陆,如果2016年4月的声明总和将是23).

如果我检查它没有行'entry'的文件,它再次登陆else语句(如我所料),所以我认为它总是进入else条件.

如何检查pandas中是否存在行?

jez*_*ael 14

我认为你需要比较索引值 - 输出是TrueFalsenumpy数组.对于标量需求any- 检查至少一个Trueall检查所有值是否为Trues:

(df.index == 'entry').any()

(df.index == 'entry').all()
Run Code Online (Sandbox Code Playgroud)

约翰高尔特评论的另一个解决方案:

'entry' in df.index
Run Code Online (Sandbox Code Playgroud)

如果需要检查子字符串:

df.index.str.contains('en').any()
Run Code Online (Sandbox Code Playgroud)

样品:

df = pd.DataFrame({'Apr 2013':[1,2,3]}, index=['entry','pdf','sum'])
print(df)
       Apr 2013
entry         1
pdf           2
sum           3

print (df.index == 'entry')
[ True False False]

print ((df.index == 'entry').any())
True
print ((df.index == 'entry').all())
False
Run Code Online (Sandbox Code Playgroud)
#check columns values
print ('entry' in df)
False
#same as explicitely call columns (better readability)
print ('entry' in df.columns)
False
#check index values
print ('entry' in df.index)
True
#check columns values
print ('Apr 2013' in df)
True
#check columns values
print ('Apr 2013' in df.columns)
True

df = pd.DataFrame({'Apr 2013':[1,2,3]}, index=['entry','entry','entry'])
print(df)
       Apr 2013
entry         1
entry         2
entry         3

print (df.index == 'entry')
[ True  True  True]

print ((df.index == 'entry').any())
True
print ((df.index == 'entry').all())
True
Run Code Online (Sandbox Code Playgroud)

  • 我认为这是您回答问题的方式(带有示例)+1 (2认同)