Pandas Indexing小结

Content

  • Single Index 的dataframe
    • basic indexing(1):loc iloc ix的column alignment机制对赋值的影响
    • slice object
    • [ ] 的理解
      • 第一种用法:抽column/row
      • 第二种用法:Boolean array
    • Boolean array
      • 直接Series或DF中抽列(Series)进行逻辑判断
      • 对Dataframe中所有元素进行逻辑判断
      • 利用isin(values)函数
    • where / mask 的用法
    • query的用法:本质都可以用pythonic 的风格代替
    • loc/iloc的用法
    • Set/ Reset index的用法
    • Selection 小结
      • 只抽取row(s) / column(s) 即前者包括所有columns 后者包括所有row
        • []:可接受 int 型slice object以及str 型的slice object,str可对应index names或者column names。
        • .loc() 只接受str 型的slice object,单一slice object是对row操作
        • .iloc() 只接受接受 int 型slice object
      • 多个条件叠加(即对row 和 column 同时有限定)
  • MultiIndex的Dataframe
    • 法一:直接用Slicers组成的tuple
    • 法二:用pd.IndexSlice



Single Index 的dataframe

对于Single Index 的dataframe :主要参照Indexing and Selecting Data 章节
Pandas Indexing小结_第1张图片





basic indexing(1):loc iloc ix的column alignment机制对赋值的影响

主要参考 basic indexing

stackflow也有 回答

Warning pandas aligns all AXES when setting Series and DataFrame from .loc, and .iloc.
This will not modify df because the column alignment is before value assignment
Pandas Indexing小结_第2张图片

使用loc进行slice后若要改变原Dataframe内部的值,需要注意直接赋值是没用的。因为loc iloc ix都会优先对齐column(column alignment),然后在赋值(value assignment),即会先把赋值表达式左右两边的column对齐(如此则失去了swap的意义),再赋值

正确做法应该是:使用raw values(这样就不会考虑到column的问题)

df.loc[:, ['B', 'A']] = df[['A', 'B']].values



slice object

所谓slice object,也即a:b形式的表达式。其中 .iloc接受a b分别为int类型的slice object, 如0:8, .loc接受a b分别为str类型的slice object,如 ‘2017-11-29 00:00:00’:‘2017-11-29 00:00:08’

而[]两种都接受。因此df[0:3] 与 df[‘a’:‘c’]是不一样的,前者是取0、1 、2三行(左开右闭),后者是取0 、1、 2、 3四行(左右都闭)。
并且若传入[ ]的是column names组成的slice object,则也是左右都闭的取法,只是此时是对列操作





[ ] 的理解

第一种用法:抽column/row

Pandas Indexing小结_第3张图片

对于Series来说,得到的就只有对应的"Scalar Value ",因为label那一层消去了。

对于Dataframe来说,则是把对应行抽出来的Series(只选了一个column)/ Dataframe(选择了多个columns,其中这些column name必须组成一个list)



注意!!!
这里的参数必须得是column names,不能是序号 or index name(即类似loc的操作),因为形如[0:3]的操作是对row操作!!在这里0:3实际是一个slice object,int 型的slice object对于[]或者.iloc都是按row操作,都是.iloc是左右都闭,两种操作等价。同理对于loc,只是loc的slice object只接受对应Index的label,而不接受整数,并且统一是左右都闭合,此时[]也可以接受,作用等同于.loc


co2[['co2','pm10']] #取列

Pandas Indexing小结_第4张图片




如下,是选择第0行至第3行的数据(左闭右开,因此还是取 0 1 2 三行)

co2[0:3] #取行

Pandas Indexing小结_第5张图片

co2['2017-11-29 00:00:00':'2017-11-29 00:00:03'] #直接用index name取行也可,类似取columns的操作

Pandas Indexing小结_第6张图片



同理使用iloc()

co2.iloc[0:3]

Pandas Indexing小结_第7张图片



或者.loc()

co2.loc['2017-11-29 00:00:00':'2017-11-29 00:00:03'] #一样是取第 0 1 2 3行

Pandas Indexing小结_第8张图片
可以看到
co2[0:3] 与 co2.iloc[0:3]

co2[‘2017-11-29 00:00:00’:‘2017-11-29 00:00:03’]与co2.loc[‘2017-11-29 00:00:00’:‘2017-11-29 00:00:03’]

分别是等价的。

NOTE:注意这里的使用slice object对row进行操作的时候,并不是直接去匹配index,即使index.to_list()后仍是由int组成的list

而是去匹配row number,具体可见下面的例子。

>>> t2.head(10)
       day_id  calling_nbr    called_nbr  ...  raw_dur  call_type  calling_cell
41   20120201       365280  y21344771393  ...       35          2           341
50   20120201       389699         95812  ...      177          2           933
52   20120201       389699         95812  ...      859          2           933
56   20120201       389699         95812  ...       15          2           933
57   20120201       389699         95812  ...      972          2           933
179  20120201       790253       3067516  ...      100          2           432
188  20120201      1024869  y26611924753  ...       36          2          1000
292  20120201       477929         96103  ...      141          2           776
294  20120201       371621  y27036299949  ...      258          2         53831
298  20120201       394657       2909161  ...      171          2           537

[10 rows x 14 columns]
>>> t2.index.to_list()
[41, 50, 52, 56, 57, 179, 188, 292, 294, 298, 317, 318, 321, 329, 332, 377, 389, 442, 601, 602, 635, 640, 659, 731, 732, 826, 921, 926, 931, 936, 938, 1196, 1343, 1406, 1507, 1509, 1634, 1703, 1763, 1774, 1782, 1795, 1870, 1874, 1916, 1921, 2061, 2086, 2094, 2202, 2206, 2212, 2321, 2334, 2377, 2450, 2454, 2554, 2558, 2559, 2815, 2826, 2894, 2923, 2925, 2976, 2978, 3049, 3054, 3103, 3209, 3300, 3332, 3337, 3478, 3479, 3484, 3516, 3517, 3533, 3615, 3628, 3640, 3844, 3848, 3856, 3874, 3918, 3926, 3934, 3951, 3975, 4046, 4052, 4056, 4061, 4062, 4139, 4144, 4147, 4154, 4161, 4168, 4182, 4185, 4235, 4301, 4357, 4359, 4378, 4534, 4589, 4614, 4615, 4695, 4727, 4737, 4749, 4884, 4890, 4901, 4920, 4945, 4951, 4960, 4963, 5088, 5097, 5182, 5292, 5445, 5454, 5462, 5544, 5579, 5583, 5602, 5622, 5637, 5638, 5642, 5643, 5661, 5666, 5680, 5745, 5750, 5829, 6094, 6148, 6155, 6253, 6277, 6320, 6331, 6333, 6354, 6355, 6360, 6364, 6461, 6494, 6498, 6576, 6596, 6612, 6622, 6623, 6629, 6635, 6645, 6648, 6667, 6762, 6781, 6785, 6833, 6841, 6843, 6844, 6845, 6972, 7039, 7082, 7092, 7099, 7103, 7124, 7247, 7276, 7278, 7322, 7343, 7344, 7361, 7365, 7462, 7492, 7514, 7536, 7540, 7574, 7586, 7589, 7611, 7692, 7696, 7761, 7768, 7797, 7999, 8010, 8065, 8074, 8117, 8159, 8164, 8267, 8274, 8327, 8329, 8366, 8416, 8427, 8489, 8567, 8568, 8775, 8784, 8939, 9047, 9136, 9202, 9205, 9244, 9373, 9374, 9390, 9459, 9591, 9599, 9653, 9656, 9822, 9878, 9882, 9887, 9948, 9949, 9950, 9951, 10036, 10037, 10054, 10081, 10084, 10135, 10178, 10221, 10272, 10299, 10303, 10304, 10313, 10337, 10500, 10528, 10596, 10615, 10619, 10622, 10676, 10680, 10682, 10683, 10733, 10768, 10797, 10806, 10810, 10823, 10837, 10840, 10879, 10899, 10930, 10936, 11040, 11081, 11084, 11114, 11119, 11143, 11154, 11244, 11340, 11381, 11404, 11411, 11416, 11519, 11600, 11609, 11610, 11648, 11702, 11735, 11743, 11762, 11866, 11869, 11891, 11892, 11893, 11952, 11954, 11963, 11998, 12053, 12059, 12065, 12068, 12148, 12201, 12256, 12259, 12349, 12377, 12381, 12384, 12387, 12403, 12411, 12445, 12468, 12478, 12555, 12571, 12608, 12733, 12741, 12773, 12823, 12831, 12850, 12876, 12889, 12891, 12893, 12953, 13009, 13095, 13105, 13137, 13148, 13184, 13203, 13289, 13302, 13303, 13304, 13305, 13306, 13307, 13308, 13317, 13325, 13432, 13491, 13498, 13563, 13572, 13682, 13685, 13692, 13698, 13705, 13706, 13707, 13708, 13828, 13831, 13882, 13953, 13954, 13955, 13956, 13967, 13969, 14006, 14025, 14085, 14106, 14171, 14234, 14237, 14255, 14387, 14388, 14399, 14615, 14625, 14650, 14680, 14742, 14744, 14751, 14752, 14753, 14777, 14915, 14917, 14933, 14952, 14957, 14989, 15001, 15029, 15035, 15036, 15040, 15121, 15185, 15192, 15206, 15215, 15337, 15338, 15339, 15340, 15341, 15342, 15380, 15440, 15444, 15460, 15499, 15593, 15603, 15604, 15915, 15932, 15983, 15984, 16001, 16025, 16073, 16092, 16157, 16216, 16217, 16317, 16351, 16451, 16461, 16476, 16507, 16509, 16595, 16642, 16643, 16653, 16681, 16701, 16739, 16740, 16850, 16910, 17069, 17115, 17193, 17211, 17212, 17213, 17214, 17215, 17216, 17250, 17260, 17364, 17383, 17390, 17391, 17392, 17393, 17410, 17412, 17413, 17469, 17479, 17482, 17484, 17504, 17549, 17611, 17618, 17626, 17635, 17644, 17665, 17740, 17742, 17747, 17840, 17860, 17872, 17925, 17952, 17988, 17991, 18058, 18100, 18156, 18159, 18189, 18206, 18210, 18274, 18287, 18338, 18424, 18510, 18540, 18541, 18610, 18645, 18877, 18930, 19028, 19066, 19075, 19105, 19261, 19319, 19338, 19446, 19463, 19469, 19539, 19545, 19559, 19646, 19662, 19927]
>>> type(t2.index.to_list()[0])
<class 'int'>

可以看到下面[0:2](左闭右开),是取的前两行!!而不是index为0和1的那两行

>>> t2[0:2]
      day_id  calling_nbr    called_nbr  ...  raw_dur  call_type  calling_cell
41  20120201       365280  y21344771393  ...       35          2           341
50  20120201       389699         95812  ...      177          2           933

[2 rows x 14 columns]
>>> t2.iloc[0:2]
      day_id  calling_nbr    called_nbr  ...  raw_dur  call_type  calling_cell
41  20120201       365280  y21344771393  ...       35          2           341
50  20120201       389699         95812  ...      177          2           933

[2 rows x 14 columns]





第二种用法:Boolean array

第二种用法就是用一个和index相同长度的Boolean array来选择row,但是此时默认是把所有columns都加入到新的dataframe中(view)

co2[co2['Day']==0]

Pandas Indexing小结_第9张图片

在这里选择了column 中 Day 对应为0的index,作为参数。得到Day 0 所对应的数据。





Boolean array

生成的Boolean array的方法有:

直接Series或DF中抽列(Series)进行逻辑判断

利用上面的,对Dataframe中取出的Series或者是直接是Series 进行逻辑判断,得到一个array

co2[co2['Day']==0]



对Dataframe中所有元素进行逻辑判断

或者如下面,直接对Dataframe中的所有元素进行逻辑判断,得到一个原Dataframe相同大小的 Boolean array

co2>20

Pandas Indexing小结_第10张图片



利用isin(values)函数

不论是是df.isin() 还是 s.isin(),始终是会把values中的值去重,变成一个set,然后把原dataframe或者Series中的元素,一个一个判断是否在i.e. isin values的值组成的set 中,并返回一个与原Dataframe或者是Series同size,对应值位置True / False(即is in 或者 not in )的Boolean Dataframe/Series (Array)

对于Series/由Dataframe取列操作得到的Series,isin()要求传入的参数(values)必须是个set/list,返回一个原有Series中set/list元素对应位置的index,所组成的Series(array)

print('Slicing using [] into DataFrame result is a type {} \n'.format(type(co2['Day'])))
co2['Day'].isin([0])

Pandas Indexing小结_第11张图片
  
而对于Dataframe, isin()函数,若传入的是一个Seires,则会将这个Series的index去匹配Dataframe的index(默认是single index,因此可以匹配),Series对应的值去匹配dataframe的各列**(而不管原来Series的name是否匹配上Dataframe的columns name)**,返回与原Dataframe相同大小,index与值都匹配成功的对应位置为True的Boolean Dataframe

(即本质还是把那个Series的values提出,组成一个set(即去了重),把Dataframe的每一列中的每个元素依次判断是否在那个set中)

在下面的例子可以看到,即使Series的name被设为‘co2’,isin()函数仍只匹配上了Day,而不会去匹配co2。因此传入的isin()的Series不一定要设定name。

index_series=pd.Series(co2.loc[co2['Day']==0,'Day'],name='co2')
co2.isin(index_series)

Pandas Indexing小结_第12张图片



对于Dataframe,还可以传入dictionary,其中dictionary的key是对应列名即可,且不必包含原DataFrame中所有列(即其余列的位置都是False)。返回值仍然是一个和原Dataframe相同大小,但其中值为True/False 的Boolean Dataframe(array)

co2.isin({'Day':[0], 'pm10':[49, 52, 53, 54]})

Pandas Indexing小结_第13张图片



若只是单纯对Dataframe.isin() 传入一个list,则用这个list其中的元素去匹配原Dataframe中值,而不管index或者columns,最后还是返回一个同大小的Boolean Dataframe(Array)。即Dataframe.values中的元素,有任何一个是在list中的,就把对应位置设为True,找不到则为False

co2.isin([49, 52, 53, 54])

Pandas Indexing小结_第14张图片





where / mask 的用法

二者的可参入的参数都一样:

df.where(cond, other=Nan, axis=None, level=None)

df.mask(cond, other=Nan, axis=None, level=None)

其中other是用于替代原df对应位置的值,axis是用于alignment时指定沿着column align还是沿着row align,level主要是用于指定MultiIndex 时的align

二者区别在于,where是把满足cond的地方(True的地方)设为保留原来的值(即df对应位置的值),把False的位置设为other中对应的值(other默认为Nan,传入别的参数则为对应的参数,或者align后的参数)

而mash则是把不满足cond的地方(Fasle对应的地方)设为原来的值,True的地方用other 或者align 后的other进行替换

where() / mask() 主要用于Partial Selection,并对原Dataframe的局部进行赋值等操作

where()的具体用法可参考:https://www.cnblogs.com/waltertong/p/10316259.html

query的用法:本质都可以用pythonic 的风格代替

Pandas Indexing小结_第15张图片

df[(df.a < df.b) & (df.b < df.c)] #选出a列值小于b列值且b列值小于c列值的行
df.query('(a < b) & (b < c)') #与上面代码相同效果

little trick:用query() 把index当做一列,与原有的列进行比较
Pandas Indexing小结_第16张图片

df.query('a < b and b < c') # 将所谓“a”列,与b列,c列的值进行比较,找出index值小于b列值小于c列值的行
 
df.query('index < b < c') # 若未命名index,或者index name与column重合,则可以直接用index代替。(二者重合的情况下以column name优先)




df.query 也支持python的in / not in方法

Pandas Indexing小结_第17张图片

df.query('a in b') # 判断a列中哪些元素是在b列组成的set中,并返回对应的一整行
df[df.a.isin(df.b)] # 利用isin() 的pythonic代码
df.query('a not in b') # 判断a中的哪些元素是在b列组成的set中,并返回对应的一整行
df[~df.a.isin(df.b)] #pythonic way





loc/iloc的用法

在这里插入图片描述

二者联系:

都是按照[row_indexer, column_indexer]来进行操作,
也可以按照[slice object]来操作,但此时就是只选择row

因为如下原因

Getting values from an object with multi-axes selection uses the following notation (using .loc as an example, but the following applies to .iloc as well). Any of the axes accessors may be the null slice :. Axes left out of the specification are assumed to be :, e.g. p.loc[‘a’] is equivalent to p.loc[‘a’, :, :].

因此只传入一个slice object,等价于只对第一个维度也就是row slice

都包含了Boolean array作为参数:具体方法详参本文的Boolean array章节




二者区别:
.loc() 主要是用于select by label(包含indexes name/ columns name)
loc() 主要用于select by position(即传入具体的某一row number / column number)
大概用法有

df.loc[df[c]\==0,'a'] #选择df 的第0行,第a列元素
df.iloc[df\==0,3] #选择df 的第0行,第3列元素
df.loc[df]





Set/ Reset index的用法

Set_index 主要是把原Dataframe中的某一(几)列抽出来(包含column names),插入到index中,并将对应index name设为column name。

Reset index 则是逆过程,把index(MultiIndex)中的某一个(几个)level的index抽出来,作为columns插入到原有的Dataframe中。





Selection 小结

只抽取row(s) / column(s) 即前者包括所有columns 后者包括所有row

[]:可接受 int 型slice object以及str 型的slice object,str可对应index names或者column names。

不接受两个以及以上的index(即只能对列或者行操作,而不能像iloc loc那样同时操作)

co2[0:3]
co2['2017-11-29 00:00:00':'2017-11-29 00:00:03'] 
#直接用index name取行也可,类似取columns的操作




.loc() 只接受str 型的slice object,单一slice object是对row操作

co2.loc['2017-11-29 00:00:00':'2017-11-29 00:00:03']
 #直接用index name取行也可,类似取columns的操作。取0 1 2 3 rows
co2.loc[:,'Day':'time'] 
#取所有rows,对columns操作




.iloc() 只接受接受 int 型slice object

co2.iloc[0:3] #取 0 1 2 rows
co2.iloc[:,0:3] #左开右闭,取第0 1 2列




多个条件叠加(即对row 和 column 同时有限定)

中心思想就是:先用条件语句或者binary operation的组合得到对于row的Boolean array(Series),然后再对想要的column进行操作




其中对于row的Boolean array

  • 可以通过直接逻辑判断(>/2 共同筛选
  • 也可以通过isin()函数,来更加具体的对row进行筛选

得到row 的Boolean array之后,再用loc iloc进行选择,注意最好避免chained indexing,因为不知道到底最后到底拿到是view 还是 copy


Example:
值得注意的是,第一个例子中是直接用index的isin()函数进行操作

#首先得到名为interested_period的对于row的Boolean Sereis,然后在对column限制。以下例子同理
co2.loc[co2.index.isin(interested_period),'co2':'pm10'] 

第二个例子中,利用到了逻辑判断语句的组合,但是要**注意加()标明语句间的顺序**,否则会报错
# 筛选出第0天中co2指数大于500的天
co2[(co2['Day']==0)&(co2['co2']>500)]





MultiIndex的Dataframe

参考:Using Slicers
推荐:利用slicers 。而且注意用.loc时,要把column indexer写全

法一:直接用Slicers组成的tuple

In[109]: single_grouper.corr()
Out[109]: 
                                         co2    ...        pm2d5
Location datetime                               ...             
C215011  2017-09-06 02:00:00 co2    1.000000    ...     0.598060
                             pm10   0.308473    ...     0.644924
                             pm1d0  0.657444    ...     0.784459
                             pm2d5  0.598060    ...     1.000000
         2017-09-06 03:00:00 co2    1.000000    ...     0.357272
                             pm10   0.323055    ...     0.819824
                             pm1d0  0.282845    ...     0.826196
                             pm2d5  0.357272    ...     1.000000
         2017-09-06 04:00:00 co2    1.000000    ...    -0.142768
                             pm10  -0.189648    ...     0.698958
                             pm1d0 -0.114981    ...     0.748531
                             pm2d5 -0.142768    ...     1.000000
         2017-09-06 05:00:00 co2    1.000000    ...    -0.248906
                             pm10  -0.222500    ...     0.780316
                             pm1d0 -0.318003    ...     0.745051
                             pm2d5 -0.248906    ...     1.000000
         2017-09-06 06:00:00 co2    1.000000    ...     0.093987
                             pm10   0.100579    ...     0.705466
                             pm1d0  0.161602    ...     0.661447
                             pm2d5  0.093987    ...     1.000000
         2017-09-06 07:00:00 co2    1.000000    ...     0.233881
                             pm10   0.160716    ...     0.720342
                             pm1d0  0.165083    ...     0.749352
                             pm2d5  0.233881    ...     1.000000
         2017-09-06 08:00:00 co2    1.000000    ...     0.569747
                             pm10   0.458880    ...     0.814600
                             pm1d0  0.591406    ...     0.843094
                             pm2d5  0.569747    ...     1.000000
         2017-09-06 09:00:00 co2    1.000000    ...    -0.074258
                             pm10   0.003474    ...     0.690436
                                      ...    ...          ...
C215020  2018-04-14 18:00:00 pm1d0  0.472544    ...     0.869046
                             pm2d5  0.383395    ...     1.000000
         2018-04-14 19:00:00 co2    1.000000    ...     0.763890
                             pm10   0.740061    ...     0.933293
                             pm1d0  0.754770    ...     0.864587
                             pm2d5  0.763890    ...     1.000000
         2018-04-14 20:00:00 co2    1.000000    ...     0.196739
                             pm10   0.247260    ...     0.645505
                             pm1d0  0.210897    ...     0.568587
                             pm2d5  0.196739    ...     1.000000
         2018-04-14 21:00:00 co2    1.000000    ...     0.389391
                             pm10   0.293694    ...     0.913022
                             pm1d0  0.193768    ...     0.769192
                             pm2d5  0.389391    ...     1.000000
         2018-04-14 22:00:00 co2    1.000000    ...    -0.194604
                             pm10  -0.229500    ...     0.910552
                             pm1d0 -0.134890    ...     0.731365
                             pm2d5 -0.194604    ...     1.000000
         2018-04-14 23:00:00 co2    1.000000    ...    -0.356215
                             pm10  -0.272154    ...     0.940299
                             pm1d0 -0.388168    ...     0.851133
                             pm2d5 -0.356215    ...     1.000000
         2018-04-15 00:00:00 co2    1.000000    ...    -0.777221
                             pm10  -0.696396    ...     0.939822
                             pm1d0 -0.809884    ...     0.883817
                             pm2d5 -0.777221    ...     1.000000
         2018-04-15 01:00:00 co2    1.000000    ...    -0.403618
                             pm10  -0.328394    ...     0.841657
                             pm1d0 -0.336217    ...     0.684951
                             pm2d5 -0.403618    ...     1.000000

[101220 rows x 4 columns]



法二:用pd.IndexSlice

同样是要注意loc要指定好row index和column index

In[112]: idx=pd.IndexSlice
In[113]: single_grouper.corr().loc[idx[:, :, 'co2'], :]
Out[113]: 
                                  co2      pm10     pm1d0     pm2d5
Location datetime                                                  
C215011  2017-09-06 02:00:00 co2  1.0  0.308473  0.657444  0.598060
         2017-09-06 03:00:00 co2  1.0  0.323055  0.282845  0.357272
         2017-09-06 04:00:00 co2  1.0 -0.189648 -0.114981 -0.142768
         2017-09-06 05:00:00 co2  1.0 -0.222500 -0.318003 -0.248906
         2017-09-06 06:00:00 co2  1.0  0.100579  0.161602  0.093987
         2017-09-06 07:00:00 co2  1.0  0.160716  0.165083  0.233881
         2017-09-06 08:00:00 co2  1.0  0.458880  0.591406  0.569747
         2017-09-06 09:00:00 co2  1.0  0.003474 -0.101632 -0.074258
         2017-09-06 10:00:00 co2  1.0  0.672076  0.752501  0.742146
         2017-09-06 11:00:00 co2  1.0  0.681013  0.787290  0.813576
         2017-09-06 12:00:00 co2  1.0  0.190242  0.297774  0.234162
         2017-09-06 13:00:00 co2  1.0  0.561493  0.608962  0.624777
         2017-09-06 14:00:00 co2  1.0  0.452426  0.589878  0.585418
         2017-09-06 15:00:00 co2  1.0  0.434273  0.493025  0.513818
         2017-09-06 16:00:00 co2  1.0  0.272358  0.210343  0.261101
         2017-09-06 17:00:00 co2  1.0  0.170626  0.277740  0.236819
         2017-09-06 18:00:00 co2  1.0  0.271029  0.295988  0.349979
         2017-09-06 19:00:00 co2  1.0  0.239557  0.203991  0.246133
         2017-09-06 20:00:00 co2  1.0  0.163458  0.217716  0.179887
         2017-09-06 21:00:00 co2  1.0 -0.003819 -0.061599  0.020957
         2017-09-06 22:00:00 co2  1.0 -0.065252  0.014226 -0.069327
         2017-09-06 23:00:00 co2  1.0 -0.153153 -0.070683 -0.146687
         2017-09-07 00:00:00 co2  1.0  0.865989  0.875561  0.885547
         2017-09-07 01:00:00 co2  1.0  0.864904  0.932527  0.920687
         2017-09-07 02:00:00 co2  1.0  0.405383  0.550483  0.476642
         2017-09-07 03:00:00 co2  1.0 -0.301033 -0.414535 -0.478034
         2017-09-07 04:00:00 co2  1.0 -0.305678 -0.396347 -0.366256
         2017-09-07 05:00:00 co2  1.0 -0.007007 -0.003598  0.022409
         2017-09-07 06:00:00 co2  1.0  0.680386  0.817571  0.802834
         2017-09-07 07:00:00 co2  1.0  0.244700  0.316053  0.340574
                               ...       ...       ...       ...
C215020  2018-04-13 20:00:00 co2  1.0 -0.179131 -0.249228 -0.302983
         2018-04-13 21:00:00 co2  1.0  0.204458  0.304093  0.204479
         2018-04-13 22:00:00 co2  1.0  0.107506  0.024135  0.125214
         2018-04-13 23:00:00 co2  1.0 -0.220059 -0.093451 -0.168481
         2018-04-14 00:00:00 co2  1.0 -0.115291 -0.192982 -0.064253
         2018-04-14 01:00:00 co2  1.0  0.467321  0.406377  0.562045
         2018-04-14 02:00:00 co2  1.0 -0.183294 -0.303493 -0.145360
         2018-04-14 03:00:00 co2  1.0 -0.196301 -0.284329 -0.142990
         2018-04-14 04:00:00 co2  1.0  0.184860  0.157116  0.181162
         2018-04-14 05:00:00 co2  1.0  0.094443  0.085902 -0.026815
         2018-04-14 06:00:00 co2  1.0 -0.600708 -0.466155 -0.618530
         2018-04-14 07:00:00 co2  1.0 -0.534604 -0.567308 -0.592667
         2018-04-14 08:00:00 co2  1.0  0.090428 -0.182726 -0.113695
         2018-04-14 09:00:00 co2  1.0  0.372609  0.028516  0.402602
         2018-04-14 10:00:00 co2  1.0 -0.281948  0.058078 -0.225148
         2018-04-14 11:00:00 co2  1.0 -0.345226 -0.529968 -0.342974
         2018-04-14 12:00:00 co2  1.0 -0.107841  0.129580 -0.041739
         2018-04-14 13:00:00 co2  1.0 -0.796716 -0.759900 -0.827842
         2018-04-14 14:00:00 co2  1.0  0.345321  0.251140  0.317384
         2018-04-14 15:00:00 co2  1.0 -0.227834 -0.233218 -0.171758
         2018-04-14 16:00:00 co2  1.0 -0.488537 -0.449984 -0.392343
         2018-04-14 17:00:00 co2  1.0 -0.681828 -0.615714 -0.719129
         2018-04-14 18:00:00 co2  1.0  0.345293  0.472544  0.383395

你可能感兴趣的:(Pandas)