簡體   English   中英

Pandas Dataframe:按值選擇多列不起作用,為什么?

[英]Pandas Dataframe: selecting multiple column by value does not work, why?

我從 sql 查詢(2014 年 5 月至 2015 年 6 月的數據)構建了一個數據框,並嘗試構建 2 個不同的數據集 - 火車使用除 2015 年 6 月以外的所有數據 - 測試僅使用 2015 年 6 月的數據當我嘗試使用時:train= df [(df.month!=6) & (df.year!=2015)]

似乎我使用的是 OR 而不是 AND,因為我沒有得到任何月=6 的值(也不是 2014 年),而且根本沒有年=2015 的值,所以 2015 年的其他月份也沒有。

我不明白代碼有什么問題。

mycurs.execute("""SELECT day, month, year, cloudcover, moonphase, precipintensity,
precipaccumulation, preciptype2, humidity, pressure, windspeed,
uvindex, visibility, temperaturehigh, weekend_2, crimecount
FROM open.nyc_weatherhist_2""")
f=mycurs.fetchall() #returns tuple with first row (unordered list)

df=pd.DataFrame(f, columns=feature_names)
print(df)
     day  month  year  ...  temperaturehigh  weekend  crimecount
0     28      4  2015  ...            20.85        0          56
1     14      4  2015  ...            18.25        0         103
2     13      7  2014  ...            27.44        0          89
3      4      1  2015  ...            12.94        0          99
4     21      9  2014  ...            24.15        0          66
..   ...    ...   ...  ...              ...      ...         ...
390    4      7  2014  ...            23.37        1          84
391    8      8  2014  ...            27.98        1          97
392   26      4  2015  ...            15.78        0          82
393    3      8  2014  ...            24.50        0          80
394    5      6  2015  ...            20.65        1          87

[395 rows x 16 columns]

train= df[(df.month!=6) & (df.year!=2015)]
print(train)
     day  month  year  ...  temperaturehigh  weekend  crimecount
2     13      7  2014  ...            27.44        0          89
4     21      9  2014  ...            24.15        0          66
8     10     11  2014  ...            16.27        0          76
9      5     11  2014  ...            17.76        0         101
11    10      7  2014  ...            28.06        0          99
..   ...    ...   ...  ...              ...      ...         ...
382   10      8  2014  ...            30.51        0         119
389   21     11  2014  ...             2.65        1         110
390    4      7  2014  ...            23.37        1          84
391    8      8  2014  ...            27.98        1          97
393    3      8  2014  ...            24.50        0          80

[184 rows x 16 columns]

只是詳細說明弗朗西斯的回答,您以錯誤的方式看待病情。

您需要除某年某月之外的所有數據。 那么,該值何時是“正確的”? 如果它們中的任何一個不在月份或年份中。

所以,這正是OR條件。

另一種看待它的方式 - 你有條件XY XY存在時,你就“錯了”,或者只是X & Y
那么,你什么時候“正確”? !(X & Y) == !X | !Y !X | !Y

您可以選擇如何解決這個問題,但您可以執行以下操作:

train = df[(df.month != 6) | (df.year != 2015)]
或者
train = df[~((df.month == 6) & (df.year == 2015))]
哪些是等價的

您需要使用 | 為或懷疑。

    >>> df = pd.DataFrame({'year':[2014,2015,2015],'month':[6,5,6]})
    >>> df
       year  month
    0  2014      6
    1  2015      5
    2  2015      6
    >>> train = df[(df['year']!=2015) | (df['month']!=6)]
    >>> train
       year  month
    0  2014      6
    1  2015      5

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM