• 提取、添加、删除列

  • 用方法链分配新列

  • 索引 / 选择

  • 数据对齐和运算

  • 转置

  • DataFrame 应用 NumPy 函数

  • 控制台显示

  • DataFrame 列属性访问和 IPython 代码补全

提取、添加、删除列

DataFrame 就像带索引的 Series 字典,提取、设置、删除列的操作与字典类似:

In [61]: df['one']Out[61]: a    1.0b    2.0c    3.0d    NaNName: one, dtype: float64

In [62]: df['three'] = df['one'] * df['two']

In [63]: df['flag'] = df['one'] > 2

In [64]: dfOut[64]:    one  two  three   flaga  1.0  1.0    1.0  Falseb  2.0  2.0    4.0  Falsec  3.0  3.0    9.0   Trued  NaN  4.0    NaN  False

删除(del、pop)列的方式也与字典类似:

In [65]: del df['two']

In [66]: three = df.pop('three')

In [67]: dfOut[67]:    one   flaga  1.0  Falseb  2.0  Falsec  3.0   Trued  NaN  False

标量值以广播的方式填充列:

In [68]: df['foo'] = 'bar'

In [69]: dfOut[69]:    one   flag  fooa  1.0  False  barb  2.0  False  barc  3.0   True  bard  NaN  False  bar

插入与 DataFrame 索引不同的 Series 时,以 DataFrame 的索引为准:

In [70]: df['one_trunc'] = df['one'][:2]

In [71]: dfOut[71]:    one   flag  foo  one_trunca  1.0  False  bar        1.0b  2.0  False  bar        2.0c  3.0   True  bar        NaNd  NaN  False  bar        NaN

可以插入原生多维数组,但长度必须与 DataFrame 索引长度一致。

默认在 DataFrame 尾部插入列。insert 函数可以指定插入列的位置:

In [72]: df.insert(1, 'bar', df['one'])

In [73]: dfOut[73]:    one  bar   flag  foo  one_trunca  1.0  1.0  False  bar        1.0b  2.0  2.0  False  bar        2.0c  3.0  3.0   True  bar        NaNd  NaN  NaN  False  bar        NaN

用方法链分配新列

受 dplyr 的 mutate 启发,DataFrame 提供了 assign() 方法,可以利用现有的列创建新列。

In [74]: iris = pd.read_csv('data/iris.data')

In [75]: iris.head()Out[75]:    SepalLength  SepalWidth  PetalLength  PetalWidth         Name0          5.1         3.5          1.4         0.2  Iris-setosa1          4.9         3.0          1.4         0.2  Iris-setosa2          4.7         3.2          1.3         0.2  Iris-setosa3          4.6         3.1          1.5         0.2  Iris-setosa4          5.0         3.6          1.4         0.2  Iris-setosa

In [76]: (iris.assign(sepal_ratio=iris['SepalWidth'] / iris['SepalLength'])   ....:      .head())   ....: Out[76]:    SepalLength  SepalWidth  PetalLength  PetalWidth         Name  sepal_ratio0          5.1         3.5          1.4         0.2  Iris-setosa     0.6862751          4.9         3.0          1.4         0.2  Iris-setosa     0.6122452          4.7         3.2          1.3         0.2  Iris-setosa     0.6808513          4.6         3.1          1.5         0.2  Iris-setosa     0.6739134          5.0         3.6          1.4         0.2  Iris-setosa     0.720000

上例中,插入了一个预计算的值。还可以传递带参数的函数,在 assign 的 DataFrame 上求值。

In [77]: iris.assign(sepal_ratio=lambda x: (x['SepalWidth'] / x['SepalLength'])).head()Out[77]:    SepalLength  SepalWidth  PetalLength  PetalWidth         Name  sepal_ratio0          5.1         3.5          1.4         0.2  Iris-setosa     0.6862751          4.9         3.0          1.4         0.2  Iris-setosa     0.6122452          4.7         3.2          1.3         0.2  Iris-setosa     0.6808513          4.6         3.1          1.5         0.2  Iris-setosa     0.6739134          5.0         3.6          1.4         0.2  Iris-setosa     0.720000

assign 返回的都是数据副本,原 DataFrame 不变。

未引用 DataFrame 时,传递可调用的,不是实际要插入的值。这种方式常见于在操作链中调用 assign 的操作。例如,将 DataFrame 限制为花萼长度大于 5 的观察值,计算比例,再制图:

In [78]: (iris.query('SepalLength > 5')   ....:      .assign(SepalRatio=lambda x: x.SepalWidth / x.SepalLength,   ....:              PetalRatio=lambda x: x.PetalWidth / x.PetalLength)   ....:      .plot(kind='scatter', x='SepalRatio', y='PetalRatio'))   ....: Out[78]: <matplotlib.axes._subplots.AxesSubplot at 0x7f66075a7978>

上例用 assign 把函数传递给 DataFrame, 并执行函数运算。这是要注意的是,该 DataFrame 是筛选了花萼长度大于 5 以后的数据。首先执行的是筛选操作,再计算比例。这个例子就是对没有事先筛选 DataFrame 进行的引用。

assign 函数签名就是 **kwargs。键是新字段的列名,值为是插入值(例如,Series 或 NumPy 数组),或把 DataFrame 当做调用参数的函数。返回结果是插入新值的 DataFrame 副本。

0.23.0 版新增。

从 3.6 版开始,Python 可以保存 **kwargs 顺序。这种操作允许依赖赋值**kwargs 后的表达式,可以引用同一个 assign() 函数里之前创建的列 。

In [79]: dfa = pd.DataFrame({"A": [1, 2, 3],   ....:                     "B": [4, 5, 6]})   ....: 

In [80]: dfa.assign(C=lambda x: x['A'] + x['B'],   ....:            D=lambda x: x['A'] + x['C'])   ....: Out[80]:    A  B  C   D0  1  4  5   61  2  5  7   92  3  6  9  12

第二个表达式里,x['C'] 引用刚创建的列,与 dfa['A'] + dfa['B'] 等效。

要兼容所有 Python 版本,可以把 assign 操作分为两部分。

In [81]: dependent = pd.DataFrame({"A": [1, 1, 1]})

In [82]: (dependent.assign(A=lambda x: x['A'] + 1)   ....:           .assign(B=lambda x: x['A'] + 2))   ....: Out[82]:    A  B0  2  41  2  42  2  4

依赖赋值改变了 Python 3.6 及之后版本与 Python 3.6 之前版本的代码操作方式。

要想编写支持 3.6 之前或之后版本的 Python 代码,传递 assign 表达式时,要注意以下两点:

  • 更新现有的列

  • 在同一个 assign 引用刚建立的更新列

示例如下,更新列 “A”,然后,在创建 “B” 列时引用该列。

>>> dependent = pd.DataFrame({"A": [1, 1, 1]})>>> dependent.assign(A=lambda x: x["A"] + 1, B=lambda x: x["A"] + 2)

Python 3.5 或更早版本的表达式在创建 B 列时引用的是 A 列的“旧”值 [1, 1, 1]。输出是:

A B0 2 31 2 32 2 3¨G30G A B0 2 41 2 42 2 4

索引 / 选择

索引基础用法如下:

操作 句法 结果
选择列 df[col] Series
用标签选择行 df.loc[label] Series
用整数位置选择行 df.iloc[loc] Series
行切片 df[5:10] DataFrame
用布尔向量选择行 df[bool_vec] DataFrame

选择行返回 Series,索引是 DataFrame 的列:

In [83]: df.loc['b']Out[83]: one              2bar              2flag         Falsefoo            barone_trunc        2Name: b, dtype: object

In [84]: df.iloc[2]Out[84]: one             3bar             3flag         Truefoo           barone_trunc     NaNName: c, dtype: object

高级索引、切片技巧,请参阅索引。重建索引介绍重建索引 / 遵循新标签集的基础知识。

数据对齐和运算

DataFrame 对象可以自动对齐列与索引(行标签)的数据。与上文一样,生成的结果是列和行标签的并集。

In [85]: df = pd.DataFrame(np.random.randn(10, 4), columns=['A', 'B', 'C', 'D'])

In [86]: df2 = pd.DataFrame(np.random.randn(7, 3), columns=['A', 'B', 'C'])

In [87]: df + df2Out[87]:           A         B         C   D0  0.045691 -0.014138  1.380871 NaN1 -0.955398 -1.501007  0.037181 NaN2 -0.662690  1.534833 -0.859691 NaN3 -2.452949  1.237274 -0.133712 NaN4  1.414490  1.951676 -2.320422 NaN5 -0.494922 -1.649727 -1.084601 NaN6 -1.047551 -0.748572 -0.805479 NaN7       NaN       NaN       NaN NaN8       NaN       NaN       NaN NaN9       NaN       NaN       NaN NaN

DataFrame 和 Series 之间执行操作时,默认操作是在 DataFrame 的上对齐 Series 的索引,按行执行广播)操作。例如:

In [88]: df - df.iloc[0]Out[88]:           A         B         C         D0  0.000000  0.000000  0.000000  0.0000001 -1.359261 -0.248717 -0.453372 -1.7546592  0.253128  0.829678  0.010026 -1.9912343 -1.311128  0.054325 -1.724913 -1.6205444  0.573025  1.500742 -0.676070  1.3673315 -1.741248  0.781993 -1.241620 -2.0531366 -1.240774 -0.869551 -0.153282  0.0004307 -0.743894  0.411013 -0.929563 -0.2823868 -1.194921  1.320690  0.238224 -1.4826449  2.293786  1.856228  0.773289 -1.446531

时间序列是特例,DataFrame 索引包含日期时,按列广播:

In [89]: index = pd.date_range('1/1/2000', periods=8)

In [90]: df = pd.DataFrame(np.random.randn(8, 3), index=index, columns=list('ABC'))

In [91]: dfOut[91]:                    A         B         C2000-01-01 -1.226825  0.769804 -1.2812472000-01-02 -0.727707 -0.121306 -0.0978832000-01-03  0.695775  0.341734  0.9597262000-01-04 -1.110336 -0.619976  0.1497482000-01-05 -0.732339  0.687738  0.1764442000-01-06  0.403310 -0.154951  0.3016242000-01-07 -2.179861 -1.369849 -0.9542082000-01-08  1.462696 -1.743161 -0.826591

In [92]: type(df['A'])Out[92]: Pandas.core.series.Series

In [93]: df - df['A']Out[93]:             2000-01-01 00:00:00  2000-01-02 00:00:00  2000-01-03 00:00:00  2000-01-04 00:00:00  ...  2000-01-08 00:00:00   A   B   C2000-01-01                  NaN                  NaN                  NaN                  NaN  ...                  NaN NaN NaN NaN2000-01-02                  NaN                  NaN                  NaN                  NaN  ...                  NaN NaN NaN NaN2000-01-03                  NaN                  NaN                  NaN                  NaN  ...                  NaN NaN NaN NaN2000-01-04                  NaN                  NaN                  NaN                  NaN  ...                  NaN NaN NaN NaN2000-01-05                  NaN                  NaN                  NaN                  NaN  ...                  NaN NaN NaN NaN2000-01-06                  NaN                  NaN                  NaN                  NaN  ...                  NaN NaN NaN NaN2000-01-07                  NaN                  NaN                  NaN                  NaN  ...                  NaN NaN NaN NaN2000-01-08                  NaN                  NaN                  NaN                  NaN  ...                  NaN NaN NaN NaN

[8 rows x 11 columns]
df - df['A']

已弃用,后期版本中会删除。实现此操作的首选方法是:

df.sub(df['A'], axis=0)

有关匹配和广播操作的显式控制,请参阅二进制操作。

标量操作与其它数据结构一样:

In [94]: df * 5 + 2Out[94]:                    A         B         C2000-01-01 -4.134126  5.849018 -4.4062372000-01-02 -1.638535  1.393469  1.5105872000-01-03  5.478873  3.708672  6.7986282000-01-04 -3.551681 -1.099880  2.7487422000-01-05 -1.661697  5.438692  2.8822222000-01-06  4.016548  1.225246  3.5081222000-01-07 -8.899303 -4.849247 -2.7710392000-01-08  9.313480 -6.715805 -2.132955

In [95]: 1 / dfOut[95]:                    A         B          C2000-01-01 -0.815112  1.299033  -0.7804892000-01-02 -1.374179 -8.243600 -10.2163132000-01-03  1.437247  2.926250   1.0419652000-01-04 -0.900628 -1.612966   6.6778712000-01-05 -1.365487  1.454041   5.6675102000-01-06  2.479485 -6.453662   3.3153812000-01-07 -0.458745 -0.730007  -1.0479902000-01-08  0.683669 -0.573671  -1.209788

In [96]: df ** 4Out[96]:                     A         B         C2000-01-01   2.265327  0.351172  2.6948332000-01-02   0.280431  0.000217  0.0000922000-01-03   0.234355  0.013638  0.8483762000-01-04   1.519910  0.147740  0.0005032000-01-05   0.287640  0.223714  0.0009692000-01-06   0.026458  0.000576  0.0082772000-01-07  22.579530  3.521204  0.8290332000-01-08   4.577374  9.233151  0.466834

支持布尔运算符:

In [97]: df1 = pd.DataFrame({'a': [1, 0, 1], 'b': [0, 1, 1]}, dtype=bool)

In [98]: df2 = pd.DataFrame({'a': [0, 1, 1], 'b': [1, 1, 0]}, dtype=bool)

In [99]: df1 & df2Out[99]:        a      b0  False  False1  False   True2   True  False

In [100]: df1 | df2Out[100]:       a     b0  True  True1  True  True2  True  True

In [101]: df1 ^ df2Out[101]:        a      b0   True   True1   True  False2  False   True

In [102]: -df1Out[102]:        a      b0  False   True1   True  False2  False  False

转置

类似于多维数组,T 属性(即 transpose 函数)可以转置 DataFrame:

# only show the first 5 rowsIn [103]: df[:5].TOut[103]:    2000-01-01  2000-01-02  2000-01-03  2000-01-04  2000-01-05A   -1.226825   -0.727707    0.695775   -1.110336   -0.732339B    0.769804   -0.121306    0.341734   -0.619976    0.687738C   -1.281247   -0.097883    0.959726    0.149748    0.176444

DataFrame 应用 NumPy 函数

Series 与 DataFrame 可使用 log、exp、sqrt 等多种元素级 NumPy 通用函数(ufunc) ,假设 DataFrame 的数据都是数字:

In [104]: np.exp(df)Out[104]:                    A         B         C2000-01-01  0.293222  2.159342  0.2776912000-01-02  0.483015  0.885763  0.9067552000-01-03  2.005262  1.407386  2.6109802000-01-04  0.329448  0.537957  1.1615422000-01-05  0.480783  1.989212  1.1929682000-01-06  1.496770  0.856457  1.3520532000-01-07  0.113057  0.254145  0.3851172000-01-08  4.317584  0.174966  0.437538

In [105]: np.asarray(df)Out[105]: array([[-1.2268,  0.7698, -1.2812],       [-0.7277, -0.1213, -0.0979],       [ 0.6958,  0.3417,  0.9597],       [-1.1103, -0.62  ,  0.1497],       [-0.7323,  0.6877,  0.1764],       [ 0.4033, -0.155 ,  0.3016],       [-2.1799, -1.3698, -0.9542],       [ 1.4627, -1.7432, -0.8266]])

DataFrame 不是多维数组的替代品,它的索引语义和数据模型与多维数组都不同。

Series 应用 __array_ufunc__,支持 NumPy 通用函数。

通用函数应用于 Series 的底层数组。

In [106]: ser = pd.Series([1, 2, 3, 4])

In [107]: np.exp(ser)Out[107]: 0     2.7182821     7.3890562    20.0855373    54.598150dtype: float64

0.25.0 版更改: 多个 Series 传递给 ufunc 时,会先进行对齐。

Pandas 可以自动对齐 ufunc 里的多个带标签输入数据。例如,两个标签排序不同的 Series 运算前,会先对齐标签。

In [108]: ser1 = pd.Series([1, 2, 3], index=['a', 'b', 'c'])

In [109]: ser2 = pd.Series([1, 3, 5], index=['b', 'a', 'c'])

In [110]: ser1Out[110]: a    1b    2c    3dtype: int64

In [111]: ser2Out[111]: b    1a    3c    5dtype: int64

In [112]: np.remainder(ser1, ser2)Out[112]: a    1b    0c    3dtype: int64

一般来说,Pandas 提取两个索引的并集,不重叠的值用缺失值填充。

In [113]: ser3 = pd.Series([2, 4, 6], index=['b', 'c', 'd'])

In [114]: ser3Out[114]: b    2c    4d    6dtype: int64

In [115]: np.remainder(ser1, ser3)Out[115]: a    NaNb    0.0c    3.0d    NaNdtype: float64

SeriesIndex 应用二进制 ufunc 时,优先执行 Series,并返回的结果也是 Series 。

In [116]: ser = pd.Series([1, 2, 3])

In [117]: idx = pd.Index([4, 5, 6])

In [118]: np.maximum(ser, idx)Out[118]: 0    41    52    6dtype: int64

NumPy 通用函数可以安全地应用于非多维数组支持的 Series,例如,SparseArray(参见稀疏计算)。如有可能,应用 ufunc 而不把基础数据转换为多维数组。

控制台显示

控制台显示大型 DataFrame 时,会根据空间调整显示大小。info()函数可以查看 DataFrame 的信息摘要。下列代码读取 R 语言 plyr 包里的棒球数据集 CSV 文件):

In [119]: baseball = pd.read_csv('data/baseball.csv')

In [120]: print(baseball)       id     player  year  stint team  lg   g   ab   r    h  X2b  X3b  hr   rbi   sb   cs  bb    so  ibb  hbp   sh   sf  gidp0   88641  womacto01  2006      2  CHN  NL  19   50   6   14    1    0   1   2.0  1.0  1.0   4   4.0  0.0  0.0  3.0  0.0   0.01   88643  schilcu01  2006      1  BOS  AL  31    2   0    1    0    0   0   0.0  0.0  0.0   0   1.0  0.0  0.0  0.0  0.0   0.0..    ...        ...   ...    ...  ...  ..  ..  ...  ..  ...  ...  ...  ..   ...  ...  ...  ..   ...  ...  ...  ...  ...   ...98  89533   aloumo01  2007      1  NYN  NL  87  328  51  112   19    1  13  49.0  3.0  0.0  27  30.0  5.0  2.0  0.0  3.0  13.099  89534  alomasa02  2007      1  NYN  NL   8   22   1    3    1    0   0   0.0  0.0  0.0   0   3.0  0.0  0.0  0.0  0.0   0.0

[100 rows x 23 columns]

In [121]: baseball.info()<class 'Pandas.core.frame.DataFrame'>RangeIndex: 100 entries, 0 to 99Data columns (total 23 columns):id        100 non-null int64player    100 non-null objectyear      100 non-null int64stint     100 non-null int64team      100 non-null objectlg        100 non-null objectg         100 non-null int64ab        100 non-null int64r         100 non-null int64h         100 non-null int64X2b       100 non-null int64X3b       100 non-null int64hr        100 non-null int64rbi       100 non-null float64sb        100 non-null float64cs        100 non-null float64bb        100 non-null int64so        100 non-null float64ibb       100 non-null float64hbp       100 non-null float64sh        100 non-null float64sf        100 non-null float64gidp      100 non-null float64dtypes: float64(9), int64(11), object(3)memory usage: 18.1+ KB

尽管 to_string 有时不匹配控制台的宽度,但还是可以用 to_string 以表格形式返回 DataFrame 的字符串表示形式:

In [122]: print(baseball.iloc[-20:, :12].to_string())       id     player  year  stint team  lg    g   ab   r    h  X2b  X3b80  89474  finlest01  2007      1  COL  NL   43   94   9   17    3    081  89480  embreal01  2007      1  OAK  AL    4    0   0    0    0    082  89481  edmonji01  2007      1  SLN  NL  117  365  39   92   15    283  89482  easleda01  2007      1  NYN  NL   76  193  24   54    6    084  89489  delgaca01  2007      1  NYN  NL  139  538  71  139   30    085  89493  cormirh01  2007      1  CIN  NL    6    0   0    0    0    086  89494  coninje01  2007      2  NYN  NL   21   41   2    8    2    087  89495  coninje01  2007      1  CIN  NL   80  215  23   57   11    188  89497  clemero02  2007      1  NYA  AL    2    2   0    1    0    089  89498  claytro01  2007      2  BOS  AL    8    6   1    0    0    090  89499  claytro01  2007      1  TOR  AL   69  189  23   48   14    091  89501  cirilje01  2007      2  ARI  NL   28   40   6    8    4    092  89502  cirilje01  2007      1  MIN  AL   50  153  18   40    9    293  89521  bondsba01  2007      1  SFN  NL  126  340  75   94   14    094  89523  biggicr01  2007      1  HOU  NL  141  517  68  130   31    395  89525  benitar01  2007      2  FLO  NL   34    0   0    0    0    096  89526  benitar01  2007      1  SFN  NL   19    0   0    0    0    097  89530  ausmubr01  2007      1  HOU  NL  117  349  38   82   16    398  89533   aloumo01  2007      1  NYN  NL   87  328  51  112   19    199  89534  alomasa02  2007      1  NYN  NL    8   22   1    3    1    0

默认情况下,过宽的 DataFrame 会跨多行输出:

In [123]: pd.DataFrame(np.random.randn(3, 12))Out[123]:           0         1         2         3         4         5         6         7         8         9        10        110 -0.345352  1.314232  0.690579  0.995761  2.396780  0.014871  3.357427 -0.317441 -1.236269  0.896171 -0.487602 -0.0822401 -2.182937  0.380396  0.084844  0.432390  1.519970 -0.493662  0.600178  0.274230  0.132885 -0.023688  2.410179  1.4505202  0.206053 -0.251905 -2.213588  1.063327  1.266143  0.299368 -0.863838  0.408204 -1.048089 -0.025747 -0.988387  0.094055

display.width 选项可以更改单行输出的宽度:

In [124]: pd.set_option('display.width', 40)  # 默认值为 80

In [125]: pd.DataFrame(np.random.randn(3, 12))Out[125]:           0         1         2         3         4         5         6         7         8         9        10        110  1.262731  1.289997  0.082423 -0.055758  0.536580 -0.489682  0.369374 -0.034571 -2.484478 -0.281461  0.030711  0.1091211  1.126203 -0.977349  1.474071 -0.064034 -1.282782  0.781836 -1.071357  0.441153  2.353925  0.583787  0.221471 -0.7444712  0.758527  1.729689 -0.964980 -0.845696 -1.340896  1.846883 -1.328865  1.682706 -1.717693  0.888782  0.228440  0.901805

还可以用 display.max_colwidth 调整最大列宽。

In [126]: datafile = {'filename': ['filename_01', 'filename_02'],   .....:             'path': ["media/user_name/storage/folder_01/filename_01",   .....:                      "media/user_name/storage/folder_02/filename_02"]}   .....: 

In [127]: pd.set_option('display.max_colwidth', 30)

In [128]: pd.DataFrame(datafile)Out[128]:       filename                           path0  filename_01  media/user_name/storage/fo...1  filename_02  media/user_name/storage/fo...

In [129]: pd.set_option('display.max_colwidth', 100)

In [130]: pd.DataFrame(datafile)Out[130]:       filename                                           path0  filename_01  media/user_name/storage/folder_01/filename_011  filename_02  media/user_name/storage/folder_02/filename_02

expand_frame_repr 选项可以禁用此功能,在一个区块里输出整个表格。

DataFrame 列属性访问和 IPython 代码补全

DataFrame 列标签是有效的 Python 变量名时,可以像属性一样访问该列:

In [131]: df = pd.DataFrame({'foo1': np.random.randn(5),   .....:                    'foo2': np.random.randn(5)})   .....: 

In [132]: dfOut[132]:        foo1      foo20  1.171216 -0.8584471  0.520260  0.3069962 -1.197071 -0.0286653 -1.066969  0.3843164 -0.303421  1.574159

In [133]: df.foo1Out[133]: 0    1.1712161    0.5202602   -1.1970713   -1.0669694   -0.303421Name: foo1, dtype: float64

IPython 支持补全功能,按 tab 键可以实现代码补全:

In [134]: df.fo<TAB>  # 此时按 tab 键 会显示下列内容df.foo1  df.foo2

Pandas数据结构之DataFrame常见操作相关推荐

  1. Python数据分析——pandas数据结构(DataFrame)

    一.pandas数据结构–DataFrame DataFrame 是表格型的数据结构,每列值的数据类型可以不同,也可以相同 DataFrame 常用于二维数据. DataFrame 的属性: valu ...

  2. Spark15:Spark SQL:DataFrame常见算子操作、DataFrame的sql操作、RDD转换为DataFrame、load和save操作、SaveMode、内置函数

    前面我们学习了Spark中的Spark core,离线数据计算,下面我们来学习一下Spark中的Spark SQL. 一.Spark SQL Spark SQL和我们之前讲Hive的时候说的hive ...

  3. pandas 入门:DataFrame的创建,读写,插入和删除

    不得不说DataFrame现在很火,已经有很多库都是基于DataFrame写的,而且它用起来也很方便,读excel只需要一行代码,想起使用xlrd的日子,至今还脑壳疼,所以对于一个用python做数据 ...

  4. python nums函数获取结果记录集有多少行记录_Python数据分析——Pandas数据结构和操作...

    Pandas是什么? 1.一个强大的分析 结构化数据 的工具集 2.基础是NumPy,提供了 高性能矩阵 的运算 3.应用在数学挖掘,数据分析.比如,学生成绩分析,股票数据分析等 4.提供数据清洗功能 ...

  5. pandas数据结构:Series/DataFrame;python函数:range/arange

    1. Series Series 是一个类数组的数据结构,同时带有标签(lable)或者说索引(index). 1.1 下边生成一个最简单的Series对象,因为没有给Series指定索引,所以此时会 ...

  6. python_pandas入门(by offical document/reference)/loc和iloc操作/dataframe插入操作/pandas读取无表头的文件/查找某一列是否有某个值

    文章目录 Pandas starter starter:学习第一步 pandas数据结构概念 十分钟了解pandas的基本特性 ten minutes to learn about the basci ...

  7. Pandas处理日期数据的常见操作集锦

    Pandas处理日期数据的常见操作集锦 数据读取及整理 获取某个日期之前/后或时间区间的数据 python 获取当前时间及前一天时间 pandas的日期时间间隔运算选取指定时间范围内/外的数据 利用p ...

  8. pandas 数据结构--DataFrame

    DataFrame 是由多种类型的列构成的二维标签数据结构,类似于 Excel .SQL 表,或 Series 对象构成的字典.DataFrame 是最常用的 Pandas 对象,与 Series 一 ...

  9. python pandas dataframe函数_Pandas的DataFrame列操作

    13. Pandas的DataFrame列操作 本章主要研究一下DataFrame数据结构如何修改.增删等操作. 13.1 rename修改列名字 对一个dataframe的数据使用rename函数后 ...

最新文章

  1. 浅析强化学习及使用Policy Network实现自动化控制
  2. 全国大学生智能车竞赛相关培训汇总
  3. java批量事物管理_[疯狂Java]JDBC:事务管理、中间点、批量更新
  4. Python入门100题 | 第055题
  5. 【C++】32. Boost C++ 库系列博客搜集
  6. Qt C++模版函数示例
  7. gitignore忽略文件夹_原创 | 详解gitignore的使用方法,让你尽情使用git add .
  8. MFC中使用SDL播放音频没有声音的解决方法
  9. python表示空类型的关键字_Python 为什么没有 void 关键字?
  10. 机器分配(信息学奥赛一本通-T1266)
  11. logger.debug的用处
  12. 【QCustomPlot】1.2 - QCustomPlot绘制静态曲线、常用函数的功能说明
  13. 火山图 多个样本、_statTarget-基于QC样本的代谢组学数据校正
  14. JavaEE学习02--HTTP协议
  15. iperf3的交叉编译
  16. ubuntu opencv 安装
  17. SHT20读取温湿度,基于cubemx
  18. vue-property-decorator
  19. DOORS8.0的安装和基本使用
  20. 随机迷宫生成算法整理分析

热门文章

  1. 流体机械原理及设计主要知识点
  2. linux-centos-nginx做负载均衡
  3. r语言怎么做经验分布_训练宝宝语言能力应该怎么做
  4. java ffmpeg视频截图_Java实现对视频进行截图的方法【附ffmpeg下载】
  5. 贾跃亭微博发新车V9图片 计划明年量产预售
  6. Android 12.0 屏蔽FallbackHome机制去掉android正在启动直接进入默认Launcher功能实现
  7. mac -- brew下载非常慢(2020最新方法)
  8. (精)反激式开关电源
  9. Procreate iPad绘画教程
  10. untracked working tree file已解决