pandas to html 多个0,pandas 从入门到放弃

目录

1.创建对象

2.查看数据

3.写入数据(read_csv)

4.写出/导出数据(to_csv)

5.读取行/列

6.添加新的值/修改已有的值 (append) 删除 drop

7.广播broadcasting

8.索引index

9.apply()函数 与agg()函数

10.groupby() 函数

11.stack 函数

12.pivot()

13.sample() 与resample()

sort与rank

rolling()

pandas视觉化:

1.plot()

1.创建对象

1.1 series:

Creating a Series by passing a list of values, letting pandas create a default integer index

Series 是一个值的序列,它只有一个列,以及索引。下面的例子中,就用默认的整数索引

s = pd.Series([1,3,5,np.nan,6,8])

0 1.0

1 3.0

2 5.0

3 NaN

4 6.0

5 8.0

dtype: float64

1.2 dataframe

DataFrame 是有多个列的数据表,每个列拥有一个 label,当然,DataFrame 也有索引

dates = pd.date_range('20130101', periods=6)

df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))

A B C D

2013-01-01 -0.791274 -1.036452 -0.442802 -0.348499

2013-01-02 0.301447 -1.294061 0.527779 -0.989473

2013-01-03 1.194980 1.032717 -0.747851 0.483149

2013-01-04 1.080179 0.760932 -0.660007 0.901296

2013-01-05 0.750439 -1.494272 1.108947 0.057424

2013-01-06 0.431982 -0.829019 1.166722 0.216905

1.3 通过字典dict转变成表格

web_stats = {'Day':[1,2,3,4,5,6],

'Visitors':[43,34,65,56,29,76],

'Bounce Rate':[65,67,78,65,45,52]}

df = pd.DataFrame(web_stats)

df

Day Visitors Bounce Rate

0 1 43 65

1 2 34 67

2 3 65 78

3 4 56 65

4 5 29 45

5 6 76 52

其实可以把dataframe 理解为由series组成的

1.3.1 通过字典和zip创建表格(2)

cities = ['austin','dallas','austin','dallas']

signups = [7,12,3,5]

visitors =[139,237,326,456]

weekdays = ['sun','sun','mon','mon']

list_labels = ['city','signups','visitors','weekday']

list_cols = [cities,signups,visitors,weekdays]

zipped =list(zip(list_labels,list_cols))

data = dict(zipped)

users = pd.DataFrame(data)

users

city signups visitors weekday

0 austin 7 139 sun

1 dallas 12 237 sun

2 austin 3 326 mon

3 dallas 5 456 mon

1.3.2 通过嵌套字典创建

pop = {'Nevada':{2001:2.4,2002:2.9},'Ohio':{2000:1.5,2001:1.7,2002:3.6}}

df= pd.DataFrame(pop)

df

Nevada Ohio

2000 NaN 1.5

2001 2.4 1.7

2002 2.9 3.6

外层字典的键作为列,内层键作为行索引

2.查看数据

2.1 df.head()

查看表格开头

2.2 df.tail()

查看表格结尾

2.3 df.describe()

查看表格的数值描述

2.4 df.index()

DataFrame 内部用 numpy 格式存储数据。你也可以单独查看 index 和 columns

2.5 df.columns()

看header的列名,这个返回的是index

food.columns[104] #直接查看某一列的名称

可以通过 tolist(), 或者 list(array) 转换为list

df.columns.tolist()

df.columns.values #返回 array

2.6 df.values()

看dataframe中的值

2.7 df.info()

会给数据的整体情况:RangeIndex;Columns;dtypes;memory usage

question:the number of columns?

df.info()

2.8 df.shape

number of observations in the dataset

shape 查看表格不用加() 参数

df.shape

查看表头的名称

df.shape[1]

2.9 df.dtypes

查看数据类型

df.dtypes #注意不要加括号,不需要参数

series.dtype #查看series的数据类型

food.dtypes['-glucose_100g'] #查看某一列的数据类型

ps:pandas支持的数据类型:

1. float

2. int

3. bool

4. datetime64[ns]

5. datetime64[ns, tz]

6. timedelta[ns]

7. category

8. object

默认的数据类型是int64,float64.

2.10 df.quantile()

求分位数,IQR

q=[0.25,0.75]

iris.quantile(q)

3.读取数据

3.1 pd.read_csv()

pd.read_csv(filepath_or_buffer, sep=',', delimiter=None, header='infer', names=None, index_col=None,

usecols=None, squeeze=False, prefix=None, mangle_dupe_cols=True, dtype=None, engine=None,

converters=None, true_values=None, false_values=None, skipinitialspace=False, skiprows=None,

nrows=None, na_values=None, keep_default_na=True, na_filter=True, verbose=False, skip_blank_lines=True,

parse_dates=False, infer_datetime_format=False, keep_date_col=False, date_parser=None, dayfirst=False, iterator=False,

chunksize=None, compression='infer', thousands=None, decimal=b'.', lineterminator=None, quotechar='"', quoting=0,

escapechar=None, comment=None, encoding=None, dialect=None, tupleize_cols=False, error_bad_lines=True,

warn_bad_lines=True, skipfooter=0, skip_footer=0, doublequote=True, delim_whitespace=False,

as_recarray=False, compact_ints=False, use_unsigned=False, low_memory=True, buffer_lines=None,

memory_map=False, float_precision=None)

常用参数:

默认分隔符是逗号 sep :str, default ‘,’ 指定分隔符。如果不指定参数,则会尝试使用逗号分隔。csv文件一般为逗号分隔符。

header :int or list of ints, default ‘infer’ 指定行数用来作为列名,数据开始行数。如果文件中没有列名,则默认为0,否则设置为None。对于数据读取有表头和没表头的情况很实用

names : array-like, default None 用于结果的列名列表,对各列重命名,即添加表头。

如数据有表头,但想用新的表头,可以设置header=0,names=['a','b']实现表头定制。

index_col : int or sequence or False, default None 用作行索引的列编号或者列名,如果给定一个序列则有多个行索引。

可使用index_col=[0,1]来指定文件中的第1和2列为索引列。

usecols : array-like, default None 返回一个数据子集,即选取某几列,不读取整个文件的内容,有助于加快速度和降低内存。

usecols=[1,2]或usercols=['a','b']

squeeze : boolean, default False

如果文件只包含一列,则返回一个Series

na_values : scalar, str, list-like, or dict, default None 一组用于替换NA/NaN的值。如果传参,需要制定特定列的空值。

默认为‘1.#IND’, ‘1.#QNAN’, ‘N/A’, ‘NA’, ‘NULL’, ‘NaN’, ‘nan’`.

index_col 可以选择两个索引列,也就是将多个列做成一个层次化索引

3.1.1 pandas读取tsv

TSV文件和CSV的文件的区别是:前者使用\t作为分隔符,后者使用,作为分隔符。

df=pd.read_csv('test.tsv', sep='\t', header=0, index_col='id')

3.2 pd.read_excel()

pd.read_excel(io, sheetname=0,header=0,skiprows=None,

index_col=None,names=None, arse_cols=None,

date_parser=None,na_values=None,thousands=None,

convert_float=True,has_index_names=None,

converters=None,dtype=None,

true_values=None,false_values=None,engine=None,

squeeze=False,**kwds)

用来读xlsx文件

3.3 pd.read_table()

适合用来读取txt文本,分隔符为\t

3.4

4.写出数据/导出数据

4.1 df.to_csv

写入到 csv 文件

DataFrame.to_csv(path_or_buf=None, sep=', ', na_rep='', float_format=None, columns=None, header=True, index=True,

index_label=None, mode='w', encoding=None, compression=None, quoting=None, quotechar='"',

line_terminator='\n', chunksize=None, tupleize_cols=None, date_format=None, doublequote=True,

escapechar=None, decimal='.')

参数:

path_or_buf : 文件路径,如果没有指定则将会直接返回字符串的 json

sep : 输出文件的字段分隔符,默认为 “,”

na_rep : 用于替换空数据的字符串,默认为''

float_format : 设置浮点数的格式(几位小数点)

columns : 要写的列

header : 是否保存列名,默认为 True ,保存

index : 是否保存索引,默认为 True ,保存

index_label : 索引的列标签名

4.2 df.to_json

写入到 json 文件

DataFrame.to_json(path_or_buf=None, orient=None, date_format=None, double_precision=10, force_ascii=True,

date_unit='ms', default_handler=None, lines=False, compression=None, index=True)

参数:

path_or_buf : 文件路径,如果没有指定则将会直接返回字符串的 json。

4.3 df.to_html

写入到 html 文件

DataFrame.to_html(buf=None, columns=None, col_space=None, header=True, index=True, na_rep='NaN', formatters=None,

float_format=None, sparsify=None, index_names=True, justify=None, bold_rows=True, classes=None,

escape=True, max_rows=None, max_cols=None, show_dimensions=False, notebook=False, decimal='.',

border=None, table_id=None)

df.to_html 生成的是一个 html 格式的 table 表,我们可以在前后加入其他标签,丰富页面。ps:如果有中文字符,需要在 head 中设置编码格式。

4.4 df.to_excel

写入到 excel 文件

DataFrame.to_excel(excel_writer, sheet_name='Sheet1', na_rep='', float_format=None, columns=None,

header=True, index=True, index_label=None, startrow=0, startcol=0, engine=None,

merge_cells=True, encoding=None, inf_rep='inf', verbose=True, freeze_panes=None)

5.读取行/列: 切片

5. 1 直接用[ ]读取

df['A']

或者

df[0:3]

5.2 通过df.loc()读取

.loc[],中括号里面是先行后列,以逗号分割,行和列分别是行标签和列标签

df.loc['2013-01-01','A']

总结:先行后列,多行或者多列就用 : 取值, 关键字用标签表示

如果没有特殊需求,强烈建议使用loc而尽量少使用[],因为loc在对DataFrame进行重新赋值操作时会避免chained indexing问题,使用[]时编译器很可能会给出SettingWithCopy的警告。

5.3 通过df.iloc()读取

.iloc[]与loc一样,中括号里面也是先行后列,行列标签用逗号分割,与loc不同的之处是,.iloc 是根据行数与列数来索引的

df.iloc[0,0]

与df.loc()同样结果

总结: 同样先行后列,多行多列用: , 关键字用数字表示!!!

注意python从0开始!!!

5.4 通过对布尔值

df[df.A>0]

A B C D

2013-01-01 0.827999 1.153047 0.464674 0.778462

2013-01-04 0.426128 -1.253330 -0.473582 -0.112445

5.5 通过df.at() 读取

at的使用方法与loc类似,但是比loc有更快的访问数据的速度,而且只能访问单个元素,不能访问多个元素。

cities = ['austin','dallas','austin','dallas']

signups = [7,12,3,5]

visitors =[139,237,326,456]

weekdays = ['sun','sun','mon','mon']

list_labels = ['city','signups','visitors','weekday']

list_cols = [cities,signups,visitors,weekdays]

zipped =list(zip(list_labels,list_cols))

data = dict(zipped)

users = pd.DataFrame(data)

users.at[1,'city']

ps: 行取值是index, 当index不是int数字时候,会报错? 暂时不知道怎么解决

选列是只能是列名,不能是position

5.6 通过df.iat() 读取

选列是只能是position (数字),不能是列名

5.7 通过[[ ]]读取column数据

这样避免读出的是series数据,而是dataframe数据

5f058d535e6d

image.png

6.为dataframe添加新的值/修改某个值

6.1 通过[ ] 修改一列的值

df['A'] = 0

qusetion: 通过 [ ]只能修改一行/多行的值,一列或者多列的值,不能 [ ]行,列的值???

6.2 按照index对应添加新的列

s1 = pd.Series([1,2,3,4,5,6], index=pd.date_range('20130102', periods=6))

df['F'] = s1

df

5f058d535e6d

image.png

6.3 通过label 修改某个值

df.at[dates[0],'A'] = 0

修改了第一列 A column的值

6.4 通过下标修改值 (iat)

df.iat[0,1] = 1

df

6.5通过loc 修改

df.loc[:,'D'] = np.arange(6)

df

6.6 通过布尔值 修改

df[df > 0] = 1

df

6.7 通过append()

向 DataFrame 增加新的数据行

df = pd.DataFrame(np.random.randn(8, 4), columns=['A','B','C','D'])

df

s = df.iloc[3]

df.append(s, ignore_index=True)

5f058d535e6d

image.png

6.8 删除drop

df.drop(['index1','index2']) #可删除多个index

df.drop(['column1','column2'],axis=1) #删除column axis=1 就是列的值

7. 广播 broadcasting

7.1 dataframe之间的运算

import pandas as pd

import numpy as np

df1 = pd.DataFrame(np.arange(9.).reshape((3,3)),columns=list('bcd'),index=['ohio','texas','colorado'])

df2 = pd.DataFrame(np.arange(12.).reshape((4,3)),columns=list('bde'),index=['utah','ohio','texas','orrgon'])

df1 + df2

b c d e

coloradoNaN NaN NaN NaN

ohio 3.0 NaN 6.0 NaN

orrgon NaN NaN NaN NaN

texas 9.0 NaN 12.0 NaN

utah NaN NaN NaN NaN

没有的值就会用na补充

或者可以用 .add( fill_value=)补充

df1.add(df2,fill_value=0)

.add() 加法

.sub() 减法

.div()除法

.mul()乘法

7.2 dataframe和series之间的运算

之后补充

8.index索引

pandas的索引对象用来保存坐标轴标签和其它元数据(如坐标轴名或名称)。构建一个Series或DataFrame时任何数组或其它序列标签在内部转化为索引

索引对象是不可变的,因此不能由用户改变

我的理解是,不可以用切片的方式更改,可以用reindex

5f058d535e6d

image.png

8.1 index的方法和属性

5f058d535e6d

image.png

8.2 reindex用法

创建一个适应新索引的新对象

8.2.1 reindex 和series

obj = pd.Series([4.5,7.2,-5.3,3.6],index=['d','b','a','c'])

obj

d 4.5

b 7.2

a -5.3

c 3.6

dtype: float64

obj2 = obj.reindex(['a','b','c','d','e'])

obj2

a -5.3

b 7.2

c 3.6

d 4.5

e NaN

dtype: float64

obj.reindex(['a','b','c','d','e'],fill_value=0)

a -5.3

b 7.2

c 3.6

d 4.5

e 0.0

dtype: float64

参数:

5f058d535e6d

image.png

8.2.2 reindex 和 dataframe

在dataframe中,reindex可以修改行/索引,列,或者两个都修改。 如果仅传入一个序列,则会重新索引行

frame = pd.DataFrame(np.arange(9).reshape((3,3)),index = ['a','c','d'],columns = ['Ohio','Texas','California'])

frame

Ohio Texas California

a 0 1 2

c 3 4 5

d 6 7 8

frame2 = frame.reindex(['a','b','c','d']) #没有的就用NaN代替

frame2

Ohio Texas California

a 0.0 1.0 2.0

b NaN NaN NaN

c 3.0 4.0 5.0

d 6.0 7.0 8.0

states = ['Texas','Utah','California'] #使用关键字即可重新索引列

frame.reindex(columns = states)

Texas Utah California

a 1 NaN 2

c 4 NaN 5

d 7 NaN 8

frame.reindex(index=['a','b','c','d'],columns=states).ffill()

California Texas Utah

a 2.0 1.0 NaN

b 2.0 1.0 NaN

c 5.0 4.0 NaN

d 8.0 7.0 NaN

按照书上的代码会报错,把method=‘ffill'删除,在reindex()后面ffill()

8.2.3 reindex参数

5f058d535e6d

image.png

9.apply函数 与 agg() 函数

9.1 apply

df.apply(func, axis=0, broadcast=False, raw=False, reduce=None, args=(), **kwds)

axis=0 列

axis = 1 行

apply函数可以对DataFrame对象进行操作,既可以作用于一行或者一列的元素,也可以作用于单个元素。

func 是要在之前def好的 或者其他已有的func

9.2 agg()

agg()

10.groupby()函数

分组函数

在数据分析文章中有详细介绍

11.stack()函数

占坑

用到再学

12.pivot()

占坑

用到再学

13.sample()与resample()

13.1 sample()

DataFrame.sample(n=None, frac=None, replace=False, weights=None, random_state=None, axis=None)

参数:

n是要抽取的行数。(例如n=20000时,抽取其中的2W行)

frac是抽取的比列。(有一些时候,我们并对具体抽取的行数不关系,我们想抽取其中的百分比,这个时候就可以选择使用frac,例如frac=0.8,就是抽取其中80%)

replace:是否为有放回抽样,取replace=True时为有放回抽样。

weights这个是每个样本的权重,具体可以看官方文档说明。

random_state:

axis是选择抽取数据的行还是列。axis=0的时是抽取行,axis=1时是抽取列(也就是说axis=1时,在列中随机抽取n列,在axis=0时,在行中随机抽取n行)

13.2 resample()

重新采样,是对原样本重新处理的一个方法,是一个对常规时间序列数据重新采样和频率转换的便捷的方法。

DataFrame.resample(rule, how=None, axis=0, fill_method=None, closed=None, label=None, convention='start',kind

=None, loffset=None, limit=None, base=0)

参数:freq 表示重采样频率,例如‘M’、‘5min’,Second(15)

how=’mean’ 用于产生聚合值的函数名或数组函数,例如‘mean’、‘ohlc’、np.max等,默认是‘mean’,其他常用的值由:‘first’、‘last’、‘median’、‘max’、‘min’

axis=0 默认是纵轴,横轴设置axis=1

fill_method = None 升采样时如何插值,比如‘ffill’、‘bfill’等

closed = ‘right’ 在降采样时,各时间段的哪一段是闭合的,‘right’或‘left’,默认‘right’

label= ‘right’ 在降采样时,如何设置聚合值的标签,例如,9:30-9:35会被标记成9:30还是9:35,默认9:35

14.sort与rank

《 》书中138页

15. df.rolling()

为了提升数据的准确性,将某个点的取值扩大到包含这个点的一段区间,用区间来进行判断,这个区间就是窗口。移动窗口就是窗口向一端滑行,默认是从右往左,每次滑行并不是区间整块的滑行,而是一个单位一个单位的滑行。

DataFrame.rolling(window, min_periods=None, center=False, win_type=None, on=None, axis=0, closed=None)

window: 也可以省略不写。表示时间窗的大小,注意有两种形式(int or offset)。如果使用int,则数值表示计算统计量的观测值的数量即向前几个数据。如果是offset类型,表示时间窗的大小。offset详解

min_periods:每个窗口最少包含的观测值数量,小于这个值的窗口结果为NA。值可以是int,默认None。offset情况下,默认为1。

center: 把窗口的标签设置为居中。布尔型,默认False,居右

win_type: 窗口的类型。截取窗的各种函数。字符串类型,默认为None。各种类型

on: 可选参数。对于dataframe而言,指定要计算滚动窗口的列。值为列名。

axis: int、字符串,默认为0,即对列进行计算

closed:定义区间的开闭,支持int类型的window。对于offset类型默认是左开右闭的即默认为right。可以根据情况指定为left both等。

pandas中的可视化

1. df.plot()

DataFrame.plot(x=None, y=None, kind='line',

ax=None, subplots=False, sharex=None,

sharey=False, layout=None, figsize=None,

use_index=True, title=None, grid=None, legend=True,

style=None, logx=False, logy=False, loglog=False,

xticks=None, yticks=None, xlim=None, ylim=None,

rot=None, fontsize=None, colormap=None, table=False,

yerr=None, xerr=None, secondary_y=False,

sort_columns=False, **kwds)

参数:

*ax8:matplotlib轴对象,默认为None。

subplots:默认为False,如果为True则为每列数据制作单独的子图。

sharex 、sharey : 布尔值,共享x,y轴。

layout : 元组(行,列)用于子图的布局。

figsize:元组(宽度,高度),以英寸为单位。

use_index:布尔值,默认为True,使用index作为x轴的坐标。

title:字符串或列表,用于图的标题。如果传入一个字符串,则在图的顶部打印字符串。如果传入的是一个列表且子图为True,则在相应子图上方打印列表中的每个项目。

grid:布尔值,默认为None,是否显示网格线。

kind: ‘line’ : line plot (default); ‘bar’ : vertical bar plot; ‘barh’ : horizontal bar plot; ‘hist’ : histogram

‘box’ : boxplot; ‘kde’ : Kernel Density Estimation plot;‘density’ : same as ‘kde’; ‘area’ : area plot

‘pie’ : pie plot; ‘scatter’ : scatter plot; ‘hexbin’ : hexbin plot

《利用python进行数据分析》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值