while循環(huán)不斷重新檢查Pandas數(shù)據(jù)幀中的更改

我有兩個(gè)相同的數(shù)據(jù)幀newold。new數(shù)據(jù)幀將在一天中隨機(jī)更新。下面的代碼檢查是否有任何更改。

import pandas as pd
import numpy as np

new = {'name': ['Sheldon', 'Penny', 'Amy', 'Bernadette', 'Raj', 'Howard'],
                'episodes': [42, 24, 31, 29, 37, 40],
                'gender': ['male', 'female', 'female', 'female', 'male', 'male']}
old = {'name': ['Sheldon', 'Penny', 'Amy', 'Bernadette', 'Raj', 'Howard'],
                'episodes': [12, 32, 31, 32, 37, 40],
                'gender': ['male', 'female', 'female', 'female', 'male', 'male']}    

df1 = pd.DataFrame(new, columns = ['name','episodes', 'gender'])    
df = pd.DataFrame(old, columns = ['name','episodes', 'gender'])

while True:
    df1 = pd.DataFrame(new, columns = ['name','episodes', 'gender'])    
    print(df[~df.episodes.eq(df1.episodes)])
    df1 = df

我需要在while循環(huán)中寫入條件,其中df[~df.episodes.eq(df1.episodes)]僅在檢測(cè)到更改時(shí)才打印。打印新數(shù)據(jù)后,它會(huì)將兩個(gè)數(shù)據(jù)框設(shè)置為相同的值(因?yàn)椴辉傩枰f數(shù)據(jù)),并重新檢查更改。上述代碼將打?。?/p>

Columns: [name, episodes, gender]
Index: []
Empty DataFrame
Columns: [name, episodes, gender]
Index: []
Empty DataFrame
Columns: [name, episodes, gender]
Index: []
Empty DataFrame

因此,如果實(shí)際打印了更改,則可能會(huì)遺漏。你能建議一種更有效的方法來完成這項(xiàng)工作嗎。

==編輯==

根據(jù)@BENY的回答,如果我這樣做:

import pandas as pd
import numpy as np

new = {'name': ['Sheldon', 'Penny', 'Amy', 'Bernadette', 'Raj', 'Sheldon'],
                'episodes': [42, 24, 31, 29, 37, 40],
                'gender': ['male', 'female', 'female', 'female', 'male', 'male']}
old = {'name': ['Sheldon', 'Penny', 'Amy', 'Bernadette', 'Raj', 'Sheldon'],
                'episodes': [12, 32, 31, 32, 37, 40],
                'gender': ['male', 'female', 'female', 'female', 'male', 'male']}    

df1 = pd.DataFrame(new, columns = ['name','episodes', 'gender'])    
df = pd.DataFrame(old, columns = ['name','episodes', 'gender'])

while True:
    df1 = pd.DataFrame(new, columns = ['name','episodes', 'gender'])    
    out = df.merge(df1[['name','episodes']],on=['name','episodes'],how='left',indicator=True).loc[lambda x : x['_merge']=='left_only']
    print(out)
    df = df1

它會(huì)在整個(gè)whileloop過程中打印出來:

         name  episodes  gender     _merge
0     Sheldon        12    male  left_only
1       Penny        32  female  left_only
3  Bernadette        32  female  left_only
         name  episodes  gender     _merge
0     Sheldon        12    male  left_only
1       Penny        32  female  left_only
3  Bernadette        32  female  left_only
         name  episodes  gender     _merge
0     Sheldon        12    male  left_only
1       Penny        32  female  left_only
3  Bernadette        32  female  left_only

有沒有辦法只打印一次。直到有另一個(gè)變化。如果我df= df1比它將打印如下,我將錯(cuò)過更改:

Columns: [name, episodes, gender, _merge]
Index: []
Empty DataFrame
Columns: [name, episodes, gender, _merge]

我需要在檢測(cè)到更改的地方干凈地獲取這些數(shù)據(jù)。

? 最佳回答:

如果要比較2數(shù)據(jù)幀并檢查任何更改/差異,為什么不使用DataFrame.compare()函數(shù)?

以下是基于示例數(shù)據(jù)的示例輸出:

df.compare(df1)

Output:

    episodes      
    self other
0   12.0  42.0
1   32.0  24.0
3   32.0  29.0

默認(rèn)情況下,它僅突出顯示差異。這里,它顯示只有列episodes有差異。self對(duì)應(yīng)于df的值,other對(duì)應(yīng)于df1的值

左邊的索引,即0、13顯示了不同的行索引。

如果要顯示整個(gè)原始形狀,還可以使用keep_shape=參數(shù),如下所示:

df.compare(df1, keep_shape=True)

Output:

  name       episodes       gender      
  self other     self other   self other
0  NaN   NaN     12.0  42.0    NaN   NaN
1  NaN   NaN     32.0  24.0    NaN   NaN
2  NaN   NaN      NaN   NaN    NaN   NaN
3  NaN   NaN     32.0  29.0    NaN   NaN
4  NaN   NaN      NaN   NaN    NaN   NaN
5  NaN   NaN      NaN   NaN    NaN   NaN

僅顯示不同的值。NaN值是沒有差異的值。

當(dāng)然,如果愿意,也可以選擇顯示所有值,包括相等值,如下所示:

df.compare(df1, keep_shape=True, keep_equal=True)

Output

         name             episodes        gender        
         self       other     self other    self   other
0     Sheldon     Sheldon       12    42    male    male
1       Penny       Penny       32    24  female  female
2         Amy         Amy       31    31  female  female
3  Bernadette  Bernadette       32    29  female  female
4         Raj         Raj       37    37    male    male
5      Howard      Howard       40    40    male    male

此選項(xiàng)允許您并排比較以檢查差異。不管怎么說,要找出差異就不那么容易了。

我建議您首先使用默認(rèn)選項(xiàng)僅顯示差異(可能是寫下具有差異的行的索引),并且可以選擇僅在需要詳細(xì)檢查另一側(cè)值(相等)時(shí)使用其他2個(gè)選項(xiàng)。

要在while循環(huán)下使用,可以使用:

while True:
    df1 = pd.DataFrame(new, columns = ['name','episodes', 'gender'])    
    out = df.compare(df1)
    print(out)
    df = df1
主站蜘蛛池模板: 四虎一区二区成人免费影院网址| 日韩一区二区在线播放| 国产成人精品一区二区秒拍| 中文字幕亚洲一区| 亚洲熟女少妇一区二区| 久久国产精品视频一区| 久久亚洲AV午夜福利精品一区| 中文字幕一区二区三区日韩精品 | 日韩毛片基地一区二区三区| 一区二区三区午夜| 中文字幕av无码一区二区三区电影| 国产精品无码一区二区三级| 亚洲乱码一区二区三区国产精品| 在线成人综合色一区| 精品乱人伦一区二区三区| 亚洲一区二区三区国产精华液| 日韩免费一区二区三区| 国语精品一区二区三区| 国产一区二区福利久久| 亚洲一区二区女搞男| 老鸭窝毛片一区二区三区| 精品国产福利一区二区| 国产亚洲一区二区手机在线观看| 久久精品午夜一区二区福利| 日本免费精品一区二区三区| 精品亚洲AV无码一区二区三区| 国产欧美一区二区精品仙草咪 | 中文字幕一区精品| 日本在线电影一区二区三区| 亚洲一区精品视频在线 | 国产乱码精品一区三上| 3D动漫精品一区二区三区| 午夜福利一区二区三区在线观看| 国产99精品一区二区三区免费 | 亚洲国产成人久久一区久久| 在线观看精品一区| 亚洲变态另类一区二区三区 | 久久中文字幕一区二区| 狠狠综合久久AV一区二区三区| 日本无码一区二区三区白峰美| 久久一区二区精品综合|