zoukankan      html  css  js  c++  java
  • pandas学习-常用方法(秦路的视频教学)

    Pandas

    2种类型:series, dataframe

    series

    >>> a = pd.Series([1,2,3,4])
    >>> a
    0    1
    1    2
    2    3
    3    4
    dtype: int64
    >>> a.index
    RangeIndex(start=0, stop=4, step=1)

     索引可以定义为其他的:

    >>> s = pd.Series([1,2,3,4], index=['a', 'b', 'c', 'd'])
    >>> s
    a    1
    b    2
    c    3
    d    4
    dtype: int64
    数字索引支持slice.
    字母索引:
    >>> s[['a', 'd']]
    a    1
    d    4
    dtype: int64

    Series的第一个参数接受dict,list

    转变为字符串

    >>> a.astype('str')
    0    1
    1    2
    2    3
    3    4
    dtype: object    #object表示字符串。⚠️a.astype产生的是新的对象。

    ⚠️Series内的数据类型必须是一样的。


    dataframe

    series是一维的结构,dataframe是二维的结构。

    >>> d = { 'name': ['qinlu', 'lui', 'qinqin'],
    ...     "sex": ['male', 'female'],
    ...     'age': [12,34,12]}
    >>> pd.DataFrame(d)
    ...
    ValueError: arrays must all be same length
    ...
    # 因为sex只有2个值。
    >>> d["sex"].append('none')
    
    >>> pd.DataFrame(d)
         name     sex  age
    0   qinlu    male   12
    1     lui  female   34
    2  qinqin    none   12
    >>>

    pd.DataFrame(data=None, index=None, columns=None, dtype=None, copy=False)

    定义columns, 列标签,行标签使用index。

    >>> pd.DataFrame([[1,2,3,4], [3,4,5,6]], columns=list('abcd'))
       a  b  c  d
    0  1  2  3  4
    1  3  4  5  6

    info()函数

    查看df的详细信息:

    >>> df = pd.DataFrame(d)
    >>> df.info()
    <class 'pandas.core.frame.DataFrame'>
    RangeIndex: 3 entries, 0 to 2
    Data columns (total 3 columns):
    name    3 non-null object
    sex     3 non-null object
    age     3 non-null int64
    dtypes: int64(1), object(2)
    memory usage: 200.0+ bytes

    切片:

    获得一列的数据。

    >>> df['age']
    0    12
    1    34
    2    12
    Name: age, dtype: int64
    >>> type(df['age'])
    <class 'pandas.core.series.Series'>    #⚠️单独对列切片,返回一个Series类型。即从二维到一维。

    获得一行的数据:

    使用方法: .loc或.iloc

    >>> df.loc[0]
    name    qinlu
    sex      male
    age        12
    Name: 0, dtype: object
    >>> type(df.iloc[0])
    <class 'pandas.core.series.Series'>    #也是返回Series类型。

    获得多列:

    >>> df[ ['age', 'name'] ]
       age    name
    0   12   qinlu
    1   34     lui
    2   12  qinqin
    • 外层[],代表切片/索引
    • 内层[],  代表列表。

    获得多行:.loc

    >>> df.loc[0:2]        
         name     sex  age
    0   qinlu    male   12
    1     lui  female   34
    2  qinqin    none   12

    ⚠️,得到了三行,即索引0,1,2

    如果使用df[0:2],只能得到0,1两行索引。 

    搜索

    >>> df.age == 34
    0    False
    1     True
    2    False
    Name: age, dtype: bool    #搜索age为34的行记录,返回的是一个bool列表。每个bool值对应一行。

    >>> df[ df.age == 34 ] name sex age 1 lui female 34
    >>> df[ [False, True, False]] name sex age 1 lui female 34

    ⚠️ 后两个表达式其实是等价的.

    还可以使用比较判断符号> , < , 还可以使用~反转符号

    >>> df[~(df.age > 15)]
         name   sex  age
    0   qinlu  male   12
    2  qinqin  none   12

    还可以使用&, |

    >>> (df.age == 12) & (df.name == 'qinlu')
    0     True
    1    False
    2    False
    dtype: bool
    >>> (df.age == 12) | (df.name == 'qinlu')
    0     True
    1    False
    2     True
    dtype: bool

    可以使用query

    >>> df.query("(age == 34) | (sex == 'male')")
        name     sex  age
    0  qinlu    male   12
    1    lui  female   34

    除了使用切片,还可以用属性的方式获得列数据

    下面2种结果等价的。

    >>> df.age
    0    12
    1    34
    2    12
    Name: age, dtype: int64
    >>> df["age"]
    0    12
    1    34
    2    12
    Name: age, dtype: int64

    可以使用运算符号对整数类的列进行运算

    >>> df.age = df.age + 100
    >>> df
         name     sex  age
    0   qinlu    male  112
    1     lui  female  134
    2  qinqin    none  112

    ⚠️DataFrame也有对行的增append,删除操作,但不建议使用,因为运算效率低。

    df.ioc[] 和.loc[]的区别

    iloc根据行所在的具体位置,来读取行记录。

    >>> df
         name     sex  age
    0   qinlu    male   12
    1     lui  female   34
    2  qinqin    none   12
    >>> df.iloc[1]
    name       lui
    sex     female
    age         34
    Name: 1, dtype: object

    loc根据index索引/标签,来读取行记录。

    >>> df.index = list("abc")
    >>> df
         name     sex  age
    a   qinlu    male   12
    b     lui  female   34
    c  qinqin    none   12
    >>> df.loc['b']
    name       lui
    sex     female
    age         34
    Name: b, dtype: object

    .loc的参数结构

    第一个参数是行标签,第二个参数是列标签 

    例子:

    >>> df.iloc[1:2, 1]
    b    female
    Name: sex, dtype: object

    显示方式有两种:

    • a scalar integer  df.iloc[0]
    • a list integer df.iloc[[0]]
    >>> df.iloc[0]
    name    qinlu
    sex      male
    age        12
    Name: a, dtype: object
    >>> df.iloc[[0]]
        name   sex  age
    a  qinlu  male   12

    赋值:使用.loc进行行定位,列定位,然后修改对应的值

    >>> df
         name     sex  age
    a   qinlu    male   11
    b     lui  female   34
    c  qinqin    none   11
    >>> df.loc[df.age == 11, 'age'] = 22
    >>> df
         name     sex  age
    a   qinlu    male   22
    b     lui  female   34
    c  qinqin    none   22

    下面的视频是7.104 read_csv 

  • 相关阅读:
    CruiseControl.NET与TFS结合的配置文件
    环信Restfull API dotnetSDK
    NAnt0.92版本首次在windows 8.1的机子上运行报错的问题解决
    asp.net接收ajax请求参数时为空的现象
    对接微信红包时:CA证书出错,请登录微信支付商户平台下载证书
    在打开vs解决方案时,怎样让所以打开的项目自动折叠
    使用Chrome或Fiddler抓取WebSocket包
    SVN使用教程
    禁用Resharper长代码自动换行的解决办法
    SQLServer日期格式化
  • 原文地址:https://www.cnblogs.com/chentianwei/p/12107938.html
Copyright © 2011-2022 走看看