数据分析工具pandas快速入门教程4-数据汇聚

我们需要的所有信息可能记录在单独的文件和数据帧中。例如,可能有一个公司信息单独表和股票价格表,数据被分成独立的表格以减少冗余信息。

连接

  • 添加行

4-1.py

import pandas as pddf1 = pd.read_csv('data/concat_1.csv')df2 = pd.read_csv('data/concat_2.csv')df3 = pd.read_csv('data/concat_3.csv')print(df1)print(df2)print(df3)row_concat = pd.concat([df1, df2, df3])print(row_concat)print(row_concat.iloc[3, ])new_row_series = pd.Series(['n1', 'n2', 'n3', 'n4'])print(pd.concat([df1, new_row_series]))new_row_df = pd.DataFrame([['n1', 'n2', 'n3', 'n4']],                          columns=['A', 'B', 'C', 'D'])print(new_row_df)print(pd.concat([df1, new_row_df]))print(df1.append(df2))print(df1.append(new_row_df))data_dict = {'A': 'n1', 'B': 'n2', 'C': 'n3', 'D': 'n4'}print(df1.append(data_dict, ignore_index=True))row_concat_i = pd.concat([df1, df2, df3], ignore_index=True)print(row_concat_i)

执行结果

$ python3 4-1.py     A   B   C   D0  a0  b0  c0  d01  a1  b1  c1  d12  a2  b2  c2  d23  a3  b3  c3  d3    A   B   C   D0  a4  b4  c4  d41  a5  b5  c5  d52  a6  b6  c6  d63  a7  b7  c7  d7     A    B    C    D0   a8   b8   c8   d81   a9   b9   c9   d92  a10  b10  c10  d103  a11  b11  c11  d11     A    B    C    D0   a0   b0   c0   d01   a1   b1   c1   d12   a2   b2   c2   d23   a3   b3   c3   d30   a4   b4   c4   d41   a5   b5   c5   d52   a6   b6   c6   d63   a7   b7   c7   d70   a8   b8   c8   d81   a9   b9   c9   d92  a10  b10  c10  d103  a11  b11  c11  d11A    a3B    b3C    c3D    d3Name: 3, dtype: object     A    B    C    D    00   a0   b0   c0   d0  NaN1   a1   b1   c1   d1  NaN2   a2   b2   c2   d2  NaN3   a3   b3   c3   d3  NaN0  NaN  NaN  NaN  NaN   n11  NaN  NaN  NaN  NaN   n22  NaN  NaN  NaN  NaN   n33  NaN  NaN  NaN  NaN   n4    A   B   C   D0  n1  n2  n3  n4    A   B   C   D0  a0  b0  c0  d01  a1  b1  c1  d12  a2  b2  c2  d23  a3  b3  c3  d30  n1  n2  n3  n4    A   B   C   D0  a0  b0  c0  d01  a1  b1  c1  d12  a2  b2  c2  d23  a3  b3  c3  d30  a4  b4  c4  d41  a5  b5  c5  d52  a6  b6  c6  d63  a7  b7  c7  d7    A   B   C   D0  a0  b0  c0  d01  a1  b1  c1  d12  a2  b2  c2  d23  a3  b3  c3  d30  n1  n2  n3  n4    A   B   C   D0  a0  b0  c0  d01  a1  b1  c1  d12  a2  b2  c2  d23  a3  b3  c3  d34  n1  n2  n3  n4      A    B    C    D0    a0   b0   c0   d01    a1   b1   c1   d12    a2   b2   c2   d23    a3   b3   c3   d34    a4   b4   c4   d45    a5   b5   c5   d56    a6   b6   c6   d67    a7   b7   c7   d78    a8   b8   c8   d89    a9   b9   c9   d910  a10  b10  c10  d1011  a11  b11  c11  d11
  • 添加列

4-2.py

In [1]: from numpy import NaN, NAN, nanIn [2]: print(NaN == True, NaN == False, NaN == 0, NaN == '', sep='|')False|False|False|FalseIn [3]: print(NaN == NaN, NaN == nan, NaN == NAN, nan == NAN, sep='|')False|False|False|FalseIn [4]: import pandas as pdIn [5]: print(pd.isnull(NaN), pd.isnull(nan), pd.isnull(NAN), sep='|')True|True|TrueIn [6]: print(pd.notnull(NaN), pd.notnull(99), pd.notnull("https://china-testing.github.io"), sep='|')False|True|True

执行结果

$ python3 4-2.py     A   B   C   D   A   B   C   D    A    B    C    D0  a0  b0  c0  d0  a4  b4  c4  d4   a8   b8   c8   d81  a1  b1  c1  d1  a5  b5  c5  d5   a9   b9   c9   d92  a2  b2  c2  d2  a6  b6  c6  d6  a10  b10  c10  d103  a3  b3  c3  d3  a7  b7  c7  d7  a11  b11  c11  d11    A   A    A0  a0  a4   a81  a1  a5   a92  a2  a6  a103  a3  a7  a11    A   B   C   D   A   B   C   D    A    B    C    D new_col_list0  a0  b0  c0  d0  a4  b4  c4  d4   a8   b8   c8   d8           n11  a1  b1  c1  d1  a5  b5  c5  d5   a9   b9   c9   d9           n22  a2  b2  c2  d2  a6  b6  c6  d6  a10  b10  c10  d10           n33  a3  b3  c3  d3  a7  b7  c7  d7  a11  b11  c11  d11           n4    A   B   C   D   A   B   C   D    A    B    C    D new_col_list  \0  a0  b0  c0  d0  a4  b4  c4  d4   a8   b8   c8   d8           n1   1  a1  b1  c1  d1  a5  b5  c5  d5   a9   b9   c9   d9           n2   2  a2  b2  c2  d2  a6  b6  c6  d6  a10  b10  c10  d10           n3   3  a3  b3  c3  d3  a7  b7  c7  d7  a11  b11  c11  d11           n4     new_col_series  0             n1  1             n2  2             n3  3             n4     0   1   2   3   4   5   6   7    8    9    10   110  a0  b0  c0  d0  a4  b4  c4  d4   a8   b8   c8   d81  a1  b1  c1  d1  a5  b5  c5  d5   a9   b9   c9   d92  a2  b2  c2  d2  a6  b6  c6  d6  a10  b10  c10  d103  a3  b3  c3  d3  a7  b7  c7  d7  a11  b11  c11  d11
  • 合并不同区间

4-3.py

import pandas as pddf1 = pd.read_csv('data/concat_1.csv')df2 = pd.read_csv('data/concat_2.csv')df3 = pd.read_csv('data/concat_3.csv')df1.columns = ['A', 'B', 'C', 'D']df2.columns = ['E', 'F', 'G', 'H']df3.columns = ['A', 'C', 'F', 'H']print(df1)print(df2)print(df3)row_concat = pd.concat([df1, df2, df3])print(row_concat)print(pd.concat([df1, df2, df3], join='inner'))print(pd.concat([df1,df3], ignore_index=False, join='inner'))df1.index = [0, 1, 2, 3]df2.index = [4, 5, 6, 7]df3.index = [0, 2, 5, 7]print(df1)print(df2)print(df3)col_concat = pd.concat([df1, df2, df3], axis=1)print(col_concat)print(pd.concat([df1, df3], axis=1, join='inner'))

执行结果

$ python3 4-3.py     A   B   C   D0  a0  b0  c0  d01  a1  b1  c1  d12  a2  b2  c2  d23  a3  b3  c3  d3    E   F   G   H0  a4  b4  c4  d41  a5  b5  c5  d52  a6  b6  c6  d63  a7  b7  c7  d7     A    C    F    H0   a8   b8   c8   d81   a9   b9   c9   d92  a10  b10  c10  d103  a11  b11  c11  d11     A    B    C    D    E    F    G    H0   a0   b0   c0   d0  NaN  NaN  NaN  NaN1   a1   b1   c1   d1  NaN  NaN  NaN  NaN2   a2   b2   c2   d2  NaN  NaN  NaN  NaN3   a3   b3   c3   d3  NaN  NaN  NaN  NaN0  NaN  NaN  NaN  NaN   a4   b4   c4   d41  NaN  NaN  NaN  NaN   a5   b5   c5   d52  NaN  NaN  NaN  NaN   a6   b6   c6   d63  NaN  NaN  NaN  NaN   a7   b7   c7   d70   a8  NaN   b8  NaN  NaN   c8  NaN   d81   a9  NaN   b9  NaN  NaN   c9  NaN   d92  a10  NaN  b10  NaN  NaN  c10  NaN  d103  a11  NaN  b11  NaN  NaN  c11  NaN  d11Empty DataFrameColumns: []Index: [0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3]     A    C0   a0   c01   a1   c12   a2   c23   a3   c30   a8   b81   a9   b92  a10  b103  a11  b11    A   B   C   D0  a0  b0  c0  d01  a1  b1  c1  d12  a2  b2  c2  d23  a3  b3  c3  d3    E   F   G   H4  a4  b4  c4  d45  a5  b5  c5  d56  a6  b6  c6  d67  a7  b7  c7  d7     A    C    F    H0   a8   b8   c8   d82   a9   b9   c9   d95  a10  b10  c10  d107  a11  b11  c11  d11     A    B    C    D    E    F    G    H    A    C    F    H0   a0   b0   c0   d0  NaN  NaN  NaN  NaN   a8   b8   c8   d81   a1   b1   c1   d1  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN2   a2   b2   c2   d2  NaN  NaN  NaN  NaN   a9   b9   c9   d93   a3   b3   c3   d3  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN4  NaN  NaN  NaN  NaN   a4   b4   c4   d4  NaN  NaN  NaN  NaN5  NaN  NaN  NaN  NaN   a5   b5   c5   d5  a10  b10  c10  d106  NaN  NaN  NaN  NaN   a6   b6   c6   d6  NaN  NaN  NaN  NaN7  NaN  NaN  NaN  NaN   a7   b7   c7   d7  a11  b11  c11  d11    A   B   C   D   A   C   F   H0  a0  b0  c0  d0  a8  b8  c8  d82  a2  b2  c2  d2  a9  b9  c9  d9

合并多个数据集

4-4.py

import pandas as pdperson = pd.read_csv('data/survey_person.csv')site = pd.read_csv('data/survey_site.csv')survey = pd.read_csv('data/survey_survey.csv')visited = pd.read_csv('data/survey_visited.csv')print(person)print(site)print(survey)print(visited)visited_subset = visited.iloc[[0, 2, 6], ]o2o_merge = site.merge(visited_subset, left_on='name', right_on='site')print(o2o_merge)m2o_merge = site.merge(visited, left_on='name', right_on='site')print(m2o_merge)ps = person.merge(survey, left_on='ident', right_on='person')vs = visited.merge(survey, left_on='ident', right_on='taken')print(ps)print(vs)

执行结果

$ python3 4-4.py       ident   personal    family0      dyer    William      Dyer1        pb      Frank   Pabodie2      lake   Anderson      Lake3       roe  Valentina   Roerich4  danforth      Frank  Danforth    name    lat    long0   DR-1 -49.85 -128.571   DR-3 -47.15 -126.722  MSK-4 -48.87 -123.40    taken person quant  reading0     619   dyer   rad     9.821     619   dyer   sal     0.132     622   dyer   rad     7.803     622   dyer   sal     0.094     734     pb   rad     8.415     734   lake   sal     0.056     734     pb  temp   -21.507     735     pb   rad     7.228     735    NaN   sal     0.069     735    NaN  temp   -26.0010    751     pb   rad     4.3511    751     pb  temp   -18.5012    751   lake   sal     0.1013    752   lake   rad     2.1914    752   lake   sal     0.0915    752   lake  temp   -16.0016    752    roe   sal    41.6017    837   lake   rad     1.4618    837   lake   sal     0.2119    837    roe   sal    22.5020    844    roe   rad    11.25   ident   site       dated0    619   DR-1  1927-02-081    622   DR-1  1927-02-102    734   DR-3  1939-01-073    735   DR-3  1930-01-124    751   DR-3  1930-02-265    752   DR-3         NaN6    837  MSK-4  1932-01-147    844   DR-1  1932-03-22    name    lat    long  ident   site       dated0   DR-1 -49.85 -128.57    619   DR-1  1927-02-081   DR-3 -47.15 -126.72    734   DR-3  1939-01-072  MSK-4 -48.87 -123.40    837  MSK-4  1932-01-14    name    lat    long  ident   site       dated0   DR-1 -49.85 -128.57    619   DR-1  1927-02-081   DR-1 -49.85 -128.57    622   DR-1  1927-02-102   DR-1 -49.85 -128.57    844   DR-1  1932-03-223   DR-3 -47.15 -126.72    734   DR-3  1939-01-074   DR-3 -47.15 -126.72    735   DR-3  1930-01-125   DR-3 -47.15 -126.72    751   DR-3  1930-02-266   DR-3 -47.15 -126.72    752   DR-3         NaN7  MSK-4 -48.87 -123.40    837  MSK-4  1932-01-14   ident   personal   family  taken person quant  reading0   dyer    William     Dyer    619   dyer   rad     9.821   dyer    William     Dyer    619   dyer   sal     0.132   dyer    William     Dyer    622   dyer   rad     7.803   dyer    William     Dyer    622   dyer   sal     0.094     pb      Frank  Pabodie    734     pb   rad     8.415     pb      Frank  Pabodie    734     pb  temp   -21.506     pb      Frank  Pabodie    735     pb   rad     7.227     pb      Frank  Pabodie    751     pb   rad     4.358     pb      Frank  Pabodie    751     pb  temp   -18.509   lake   Anderson     Lake    734   lake   sal     0.0510  lake   Anderson     Lake    751   lake   sal     0.1011  lake   Anderson     Lake    752   lake   rad     2.1912  lake   Anderson     Lake    752   lake   sal     0.0913  lake   Anderson     Lake    752   lake  temp   -16.0014  lake   Anderson     Lake    837   lake   rad     1.4615  lake   Anderson     Lake    837   lake   sal     0.2116   roe  Valentina  Roerich    752    roe   sal    41.6017   roe  Valentina  Roerich    837    roe   sal    22.5018   roe  Valentina  Roerich    844    roe   rad    11.25    ident   site       dated  taken person quant  reading0     619   DR-1  1927-02-08    619   dyer   rad     9.821     619   DR-1  1927-02-08    619   dyer   sal     0.132     622   DR-1  1927-02-10    622   dyer   rad     7.803     622   DR-1  1927-02-10    622   dyer   sal     0.094     734   DR-3  1939-01-07    734     pb   rad     8.415     734   DR-3  1939-01-07    734   lake   sal     0.056     734   DR-3  1939-01-07    734     pb  temp   -21.507     735   DR-3  1930-01-12    735     pb   rad     7.228     735   DR-3  1930-01-12    735    NaN   sal     0.069     735   DR-3  1930-01-12    735    NaN  temp   -26.0010    751   DR-3  1930-02-26    751     pb   rad     4.3511    751   DR-3  1930-02-26    751     pb  temp   -18.5012    751   DR-3  1930-02-26    751   lake   sal     0.1013    752   DR-3         NaN    752   lake   rad     2.1914    752   DR-3         NaN    752   lake   sal     0.0915    752   DR-3         NaN    752   lake  temp   -16.0016    752   DR-3         NaN    752    roe   sal    41.6017    837  MSK-4  1932-01-14    837   lake   rad     1.4618    837  MSK-4  1932-01-14    837   lake   sal     0.2119    837  MSK-4  1932-01-14    837    roe   sal    22.5020    844   DR-1  1932-03-22    844    roe   rad    11.25

参考资料


关注微信公众号『SBKKO干货工具』

第一时间了解最新网络动态
关注博主不迷路~

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论