Pandas在一个列中比较每一个日期,如果不是的话,还设置一个标志?

2024-05-16 23:37:13 发布

您现在位置:Python中文网/ 问答频道 /正文

大家好,我正在浏览YouTube上关于熊猫数据帧的教程,当我试图在Column上过滤日期时遇到了一个问题:

我做了一个虚拟的csv文件如下:

Name,State,Date
Mike,Kansas,April7 2018
Charlie,Dubai,7April2018
Amanda,Oregon,07-04-2018
Samantha,Florida,07-04-2018
Tivan,Miami,07-04-2018
Pedro,Mexico,07-04-2018
Lionel,NYC,07-04-2018
Claire,Washington,07-04-2018
Linsday,Texas,07-04-2018

从上面的csv中,我试图找到一种方法,以便比较所有的日期,以检查它们是否都是相同的格式,如果不是,那么我需要设置一个相同的标志。这是我的代码:

^{pr2}$

但它总是显示值为0,我该如何更正我的错误,还是有更好的方法来同样做呢。提前谢谢。


Tags: 文件csv数据方法namedateyoutubecolumn
2条回答

您可以比较不等于!=sumTrues值的第一个值:

flag = (df['Date'] != df.loc[0, 'Date']).sum()
print "Finished searching file, the value of the flag is:\n", flag
Finished searching file, the value of the flag is:
 8

细节

^{pr2}$

如果want count not equal和非NaNs值,则分别比较它并按&链接布尔掩码(按位和,因为使用数组):

print (df)
       Name       State         Date
0      Mike      Kansas  April7 2018
1   Charlie       Dubai   7April2018
2    Amanda      Oregon   07-04-2018
3  Samantha     Florida   07-04-2018
4     Tivan       Miami          NaN
5     Pedro      Mexico          NaN
6    Lionel         NYC   07-04-2018
7    Claire  Washington   08-04-2018
8   Linsday       Texas   07-04-2018
print (df['Date'] != '7April2018')
0     True
1    False
2     True
3     True
4     True
5     True
6     True
7     True
8     True
Name: Date, dtype: bool

print (df['Date'].notnull())
0     True
1     True
2     True
3     True
4    False
5    False
6     True
7     True
8     True
Name: Date, dtype: bool

print ((df['Date'] != '7April2018') & df['Date'].notnull())
0     True
1    False
2     True
3     True
4    False
5    False
6     True
7     True
8     True
Name: Date, dtype: bool
flag = ((df['Date'] != '7April2018') & df['Date'].notnull()).sum()
print (flag)
6

如果您只对0=无不匹配或1=不匹配感兴趣,那么可以使用python中的any()函数。在

import pandas as pd

data = '''\
Name,State,Date
Mike,Kansas,April7 2018
Charlie,Dubai,7April2018
Amanda,Oregon,07-04-2018
Samantha,Florida,07-04-2018
Tivan,Miami,07-04-2018
Pedro,Mexico,07-04-2018
Lionel,NYC,07-04-2018
Claire,Washington,07-04-2018
Linsday,Texas,07-04-2018'''

df = pd.read_csv(pd.compat.StringIO(data), sep=',')

flag = (df['Date'] != '7April2018').any().astype(int)

print(flag)

返回:1

相关问题 更多 >