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分。 

12-20 14:09