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
- 外层[],代表切片/索引
- 内层[], 代表列表。
获得多行:
>>> 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
⚠️看到秦路7.103视频,7分。