Python数据分析学习笔记——DataFrame(还在更新中)

pandas的官方文档

1.DataFrame

DataFrame是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔值等)。DataFrame既有行索引也有列索引,它可以被看做由Series组成的字典(共用同一个索引)。
DataFrame可以通过类似字典的方式或者.columnname的方式将列获取为一个Series。行也可以通过位置或名称的方式进行获取。
为不存在的列赋值会创建新列。

1.1创建DataFrame

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

data:numpy ndarray(结构化或同类),dict或DataFrame,Dict可以包含Series,数组,常量或类似列表的对象
index:dataframe的索引,如果没有自定义,则默认为RangeIndex(0,1,2,…,n)
columns:dataframe的列标签,如果没有自定义,则默认为RangeIndex(0,1,2,…,n)
dtype:默认None,要强制的数据类型。 只允许一个dtype
copy:boolean,默认为False

1.2读取文件

  • 读取csv文件dfcsv = pd.DataFrame(pd.read_csv("name"))
  • 读取excel文件dfexcel = pd.DataFrame(pd.read_excel("name"))
  • 读取mysql数据库文件:需要用到sqlalchemy 和pymysql包
import pandas as pd
from sqlalchemy import create_engine
engine = create_engine("mysql+pymysql://root:123456@localhost:3306/classicmodels")
sql = "select * from customers"
dfsql = pd.read_sql_query(sql,engine)
dfsql
root	>>	服务器名称
123456	>>	数据库服务器密码
localhost:3306	>>	数据库地址
classicmodels	>>	数据库名称

1.3查看数据的维度

df.shape #输出行数、列数

dfexcel.shape
(326, 7)

1.4查看数据表基本信息

dfexcel.info()

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 326 entries, 0 to 325
Data columns (total 7 columns):
订单编码      326 non-null int64
订单日期      326 non-null datetime64[ns]
要求发货日期    326 non-null datetime64[ns]
实际发货日期    312 non-null datetime64[ns]
订单状态      326 non-null object
备注        80 non-null object
顾客编码      326 non-null int64
dtypes: datetime64[ns](3), int64(2), object(2)
memory usage: 17.9+ KB
dfsql.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 20 entries, 0 to 19
Data columns (total 6 columns):
订单编码     20 non-null int64
产品编码     20 non-null object
订购数量     20 non-null int64
单价       20 non-null float64
订单子编码    20 non-null int64
订单金额     20 non-null float64
dtypes: float64(2), int64(3), object(1)
memory usage: 1.0+ KB

1.5获取表、列数据

frame
frame[‘col1’]
frame.col1

dfexcel
dfexcel.订单日期
dfexcel["订单日期"]

1.6查看空值

dfexcel.isnull()
dfexcel["col1"].isnull()
dfexcel["订单日期"].isnull()

1.7查看唯一值

dfexcel["col1"].unique()
dfexcel["订单日期"].unique()

1.8查看表列名

dfexcel.columns

1.9查看前N行、后N行数据

dfexcel.head(10)
dfexcel.tail(10)

1.10添加列

1.10.1用eval函数添加计算列

inplace参数为是否替代当前DataFrame,默认为false

dfsql.eval("订单金额 = 订购数量 * 单价 ",inplace = True)
dfsql.columns
Index(['订单编码', '产品编码', '订购数量', '单价', '订单子编码', '订单金额'], dtype='object')

一次添加多个计算列时

dfsql.eval("""订单金额 = 订购数量 * 单价
           订购数量1 = 订购数量
           单价1 = 单价
           """,inplace = True);
dfsql.columns
Index(['订单编码', '产品编码', '订购数量', '单价', '订单子编码', '订单金额', '订购数量1', '单价1'], dtype='object')

1.10.2 用insert函数插入列

DataFrame.insert("location", new_name_column, value_inserted_column)
location:插入的索引位置,从0开始
new_name_column:新列名称
value_inserted_column:新列值

ins1 = dfsql.pop("订单金额"); #删除之前eval插入的计算列
print(dfsql.columns)
Index(['订单编码', '产品编码', '订购数量', '单价', '订单子编码', '订单金额', '订购数量1', '单价1'], dtype='object')

dfsql.insert(4,"订单金额",ins1) #在第4索引列插入新列
print(dfsql.columns)
Index(['订单编码', '产品编码', '订购数量', '单价', '订单金额', '订单子编码', '订购数量1', '单价1'], dtype='object')

1.11删除行列数据

1.11.1用pop函数

先看下官方文档介绍 >>>戳我看原链接
pandas的Github源码

DataFrame.pop(item)
从frame里删除项目并返回. 如果不存在则返回KeyError错误.

参数:item : str格式,要被删除的列标签(column label直译的。应该是列名称的意思)
返回值:已删除的series
以上面的数据库dfsql为例

print(dfsql.columns)
Index(['订单编码', '产品编码', '订购数量', '单价', '订单金额', '订单子编码'], dtype='object')

dfsql.eval("订单金额 = 订购数量 * 单价",inplace = True) #先添加一列订单金额.
print(dfsql)
     订单编码      产品编码  订购数量      单价  订单子编码     订单金额
0   10100  S18_1749    30  136.00      3  4080.00
1   10100  S18_2248    50   55.09      2  2754.50
2   10100  S18_4409    22   75.46      4  1660.12
3   10100  S24_3969    49   35.29      1  1729.21
4   10101  S18_2325    25  108.06      4  2701.50
5   10101  S18_2795    26  167.06      1  4343.56
6   10101  S24_1937    45   32.53      3  1463.85
7   10101  S24_2022    46   44.35      2  2040.10
8   10102  S18_1342    39   95.55      2  3726.45
9   10102  S18_1367    41   43.13      1  1768.33
10  10103  S10_1949    26  214.30     11  5571.80
11  10103  S10_4962    42  119.67      4  5026.14
12  10103  S12_1666    27  121.64      8  3284.28
13  10103  S18_1097    35   94.50     10  3307.50
14  10103  S18_2432    22   58.34      2  1283.48
15  10103  S18_2949    27   92.19     12  2489.13
16  10103  S18_2957    35   61.84     14  2164.40
17  10103  S18_3136    25   86.92     13  2173.00

print(dfsql.pop("订单金额"))
0     4080.00
1     2754.50
2     1660.12
3     1729.21
4     2701.50
5     4343.56
6     1463.85
7     2040.10
8     3726.45
9     1768.33
10    5571.80
11    5026.14
12    3284.28
13    3307.50
14    1283.48
15    2489.13
16    2164.40
17    2173.00
Name: 订单金额, dtype: float64

1.12.2 用del函数

del frame[‘col1’]
del frame.col1

del dfexcel.订单日期

1.12.3用drop函数

pandas.DataFrame.drop官方文档 >>>戳我点链接

DataFrame.drop(labels=None, axis=0, index=None, columns=None, level=None, inplace=False, errors=‘raise’)
函数作用:从行或列删除指定标签。Drop specified labels from rows or columns.
通过指定的标签名字和对应的轴,或者直接指定索引名称或列名称来删除行或者列。

下面这句介绍每太搞清楚到底是何意思。
When using a multi-index, labels on different levels can be removed by
specifying the level.

参数介绍:

参数名称 含义 介绍
labels 单独的标签或者类似的list 要删除的索引或者列标签
axis 0或者索引名称,1或者列名称 ,默认为0 确定从索引(或者axis = 0)还是列(或者axis = 1)删除标签
index / columns 单个标签或者类似list 标签值,axis = 1 等同于columns = 列名称(也就是前两个参数等同于第三个参数)
level int or level name optional(没搞懂,反正可有可无。手动滑稽脸) For MultiIndex, level from which the labels will be removed.
inplace 布尔值,默认false 如果为True,就在原数据上执行删除操作,不返回任何值
errors {‘ignore’, ‘raise’}, default ‘raise’ If ‘ignore’, suppress error and only existing labels are dropped.

返回值:
已删除的pandas.DataFrame
Raises:
如果标签不存在指定的轴上,返回KeyError

print(dfsql.columns)
Index(['订单编码', '产品编码', '订购数量', '单价', '订单子编码'], dtype='object')

dfsql.eval("订单金额 = 订购数量 * 单价",inplace = True)

print(dfsql.columns)
Index(['订单编码', '产品编码', '订购数量', '单价', '订单子编码', '订单金额'], dtype='object')

dfsql.drop(["订单金额"],axis = 1)
     订单编码      产品编码  订购数量      单价  订单子编码
0   10100  S18_1749    30  136.00      3
1   10100  S18_2248    50   55.09      2
2   10100  S18_4409    22   75.46      4
3   10100  S24_3969    49   35.29      1
4   10101  S18_2325    25  108.06      4
5   10101  S18_2795    26  167.06      1
6   10101  S24_1937    45   32.53      3
7   10101  S24_2022    46   44.35      2
8   10102  S18_1342    39   95.55      2
9   10102  S18_1367    41   43.13      1
10  10103  S10_1949    26  214.30     11
11  10103  S10_4962    42  119.67      4
12  10103  S12_1666    27  121.64      8
13  10103  S18_1097    35   94.50     10
14  10103  S18_2432    22   58.34      2
15  10103  S18_2949    27   92.19     12
16  10103  S18_2957    35   61.84     14
17  10103  S18_3136    25   86.92     13
18  10103  S18_3320    46   86.31     16
19  10103  S18_4600    36   98.07      5


dfsql.drop(columns = ["订单金额"])
# dfsql.drop(["订单金额"],axis = 1)等同于dfsql.drop(columns = ["订单金额"])

     订单编码      产品编码  订购数量      单价  订单子编码
0   10100  S18_1749    30  136.00      3
1   10100  S18_2248    50   55.09      2
2   10100  S18_4409    22   75.46      4
3   10100  S24_3969    49   35.29      1
4   10101  S18_2325    25  108.06      4
5   10101  S18_2795    26  167.06      1
6   10101  S24_1937    45   32.53      3
7   10101  S24_2022    46   44.35      2
8   10102  S18_1342    39   95.55      2
9   10102  S18_1367    41   43.13      1
10  10103  S10_1949    26  214.30     11
11  10103  S10_4962    42  119.67      4
12  10103  S12_1666    27  121.64      8
13  10103  S18_1097    35   94.50     10
14  10103  S18_2432    22   58.34      2
15  10103  S18_2949    27   92.19     12
16  10103  S18_2957    35   61.84     14
17  10103  S18_3136    25   86.92     13
18  10103  S18_3320    46   86.31     16
19  10103  S18_4600    36   98.07      5

2.pandas.date_range()

2.1语法

pandas.date_range(start=None, end=None, periods=None, freq=‘D’,tz=None, normalize=False, name=None, closed=None)

该函数主要用于生成一个固定频率的时间索引,在调用构造方法时,必须指定start、end、periods中的两个参数值,否则报错。

2.2主要参数说明

start:开始日期,例如:‘20180101’,‘01/01/2018’
end:结束日期
periods:固定时期,取值为整数或None;
freq:日期偏移量,取值为string或DateOffset,默认为’D’,还有’M’,‘Q’,‘Y’
normalize:若参数为True表示将start、end参数值规范化到午夜时间20180101 00:00:00
name:生成时间索引对象的名称,取值为string或None
closed:可以理解成在closed=None情况下返回的结果中,若closed=‘left’表示在返回的结果基础上,再取左开右闭的结果,若closed='right’表示在返回的结果基础上,再取做闭右开的结果

示例:date_range = pd.date_range('20180101', periods=10, freq='D')
输出:DatetimeIndex(['2018-01-01', '2018-01-02', '2018-01-03', '2018-01-04', '2018-01-05', '2018-01-06', '2018-01-07', '2018-01-08','2018-01-09', '2018-01-10'],dtype='datetime64[ns]', freq='D')
参数 说明
D
B 工作日
MS 月第一天
BMS 月第一个工作日
M 月最后一天
BM 月最后一个工作日
Q 季度末
Y 年末
H 小时
min 分钟
S
W-MON、W-TUE 每周,并指定每周从周几开始

猜你喜欢

转载自blog.csdn.net/wuhuideluori/article/details/85338819