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 

 

 

你可能感兴趣的:(pandas学习-常用方法(秦路的视频教学))