【Python菜鸟进阶大神】Pandas_003:读取/存储各类格式数据文件
在公司用的最多的就是.txt文本文件、.xlsx文件、.json文件。怎样将数据读进来,是数据处理分析的第一步,今天来一一详解。
【重要的知识碎】创建一个数据文件:
涉及知识点:
1、随机种子seed():np.random.seed(num),随机种子的作用是随意设定一个随机数种子,在接下来产生随机数的时候,如果参数是相同的产生的随机数是不会变化的。
In [47]: np.random.seed(12345)#设置随机数种子12345,产生随机数
np.random.randint(0,20,10)
Out[47]: array([ 2, 5, 1, 4, 9, 5, 2, 1, 17, 14])
=================================================================
In [50]: np.random.seed(12345)#设置随机数种子12345,第二次产生随机数
np.random.randint(0,20,10)
Out[50]:array([ 2, 5, 1, 4, 9, 5, 2, 1, 17, 14])
==================================================================
In [52]:np.random.seed(54321)#改变随机数种子154321,产生随机数
np.random.randint(0,20,10)
Out[52]:
array([17, 10, 0, 4, 14, 18, 8, 7, 10, 12])
2、生成随机数的函数(上篇文章有介绍三种):
A、np.arange(start,end,step):np.arange(0,9,1),从0-9以1为步长产生等差数列
np.arange(0,9,0.5) #0-9以0.5为步长,区别于range()可以为小数。
Out[86]:
array([0. , 0.5, 1. , 1.5, 2. , 2.5, 3. , 3.5, 4. , 4.5, 5. , 5.5, 6. ,
6.5, 7. , 7.5, 8. , 8.5])
B、np.random.randint(low,high,size):从[low,high)生成size个随机整数。
np.random.randint(1,4,size=(3,4)) #从1-4(左闭右开),生成3行4列共12个随机整数
Out[78]:
array([[3, 1, 2, 1],
[2, 3, 2, 2],
[3, 2, 1, 2]])
------------------------------------------------------------------
In [79]:
np.random.randint(1,4,12) #从1-4(左闭右开),生成12个随机整数
Out[79]:
array([3, 2, 3, 3, 3, 3, 1, 2, 3, 2, 3, 1])
------------------------------------------------------------------
In [82]: np.random.randint(12) #传入一个数,表示从0-几
Out[82]: 8
C、np.random.randn():生成一个均值为0标准差为1的服从正态分布的随机数数组
In [73]:np.random.randn(4,3) #传入行和列数
Out[73]:
array([[ 0.56123309, -1.64940536, 0.82279244],
[ 0.47470522, 0.33003799, -0.5389939 ],
[ 0.42604013, 0.54227641, 1.42724082],
[ 1.28640474, 0.2017173 , 0.58869308]])
---------------------------------------------------------------
In [77]: np.random.randn(4) #传入单个值,表示有几个数
Out[77]: array([-1.41194528, 0.63373716, 1.00386027, 0.83872146])
D、np.random.random():生成0-1之间的浮点数
In [67]:np.random.random((4,5)) #传入元祖,表示4行5列0-1之间的浮点数
Out[67]:
array([[0.13575829, 0.22091134, 0.45536983, 0.78955256, 0.86600058],
[0.28430599, 0.44385551, 0.51903398, 0.05552575, 0.9820138 ],
[0.81713105, 0.74744683, 0.799136 , 0.87975297, 0.17578384],
[0.24028634, 0.27183904, 0.2842686 , 0.04407306, 0.87727694]])
--------------------------------------------------------------------------
In [68]:
np.random.random(4) #传入单个值,表示多少个0-1的之间的浮点
Out[68]:
array([0.20433616, 0.81863939, 0.0576053 , 0.52462967])
3、zip函数:将可迭代对象,打包成一个个元祖
a=[1,2,3,4]
b=[11,22,33,44]
v=zip(a,b)
print(*zip(v)) #解压
((1, 11),) ((2, 22),) ((3, 33),) ((4, 44),)
for i,j in zip(a,b):
print("%d * %d =%d"%(i,j,i*j))
1 * 11 =11
2 * 22 =44
3 * 33 =99
4 * 44 =176
★★生成1000个名字列表:
names = ['Bob','Jessica','Mary','John','Mel'] #定义一个姓名列表
In [2]:
import numpy as np
name_list=[names[np.random.randint(low=0,high=len(names))] for i in range(1000)] #生成1000个名字
name_list[:10] #查看前10个
['John',
'Bob',
'Jessica',
'Bob',
'Jessica',
'Jessica',
'Mary',
'John',
'John',
'Bob']
★★生成1000个数字列表,表示有多少相同人名的人数:
In [3]:
num=[np.random.randint(1,1000) for i in range(1000)]
num[:10]
[446, 485, 886, 158, 944, 250, 609, 685, 501, 577]
★★用zip函数将name_list和num拼接在一起:
In [4]:
import pandas as pd
df=pd.DataFrame(data=list(v),columns=['name',"num"])
df[:10]
name num
0 John 446
1 Bob 485
2 Jessica 886
3 Bob 158
4 Jessica 944
5 Jessica 250
6 Mary 609
7 John 685
8 John 501
9 Bob 577
★★用将上述数据保存,导出为txt文件:
df.to_csv('num_for_name.txt',header=True,index=False)
可以利用Python的help()函数查看相关的参数:
from pandas import DataFrame
help(DataFrame.to_csv)
to_csv(path_or_buf,sep,na_rep,columns,header,index)
[参数解析]:
1.path_or_buf:字符串,放文件名、相对路径、文件流等;
2.sep:字符串,分隔符,跟read_csv()的一个意思
3.na_rep:字符串,将NaN转换为特定值
4.columns:列表,指定哪些列写进去
5.header:默认header=0,如果没有表头,设置header=None,表示我没有表头呀!
6.index:关于索引的,默认True,写入索引
★★导出为各种格式的文件:
均可通过Python的help()命令查看参数,或者通过下面链接:
https://pandas.pydata.org/pandas-docs/stable/reference/frame.html#serialization-io-conversion
In [40]:df.to_csv('num_for_name.txt',header=True,index=False) #导出为txt文件
In [41]:df.to_json('num_for_name.json') #导出为josn文件
In [42]:df.to_csv('num_for_name.csv',header=True,index=False) #导出为csv文件
In [43]:df.to_excel('num_for_name.xlsx',sheet_name="sheet1") #导出为excel文件
本文到此,前面所涉及的,是非常系统不得不说到的,下面才开始讲文件的读取:
一、读取csv格式文件
import pandas as pd
help(pd.read_csv) #通过帮助命令,查看API
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, skipfooter=0, 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, doublequote=True,
escapechar=None, comment=None, encoding=None, dialect=None, tupleize_cols=None, error_bad_lines=True, warn_bad_lines=True, delim_whitespace=False, low_memory=True, memory_map=False, float_precision=None)
参数非常非常非常多,只要知道常用的就可以了:
1.filepath_or_buffer:文件所在处的路径,唯一一个必须有的参数,其它都是按需求选
2.sep:指定分隔符,默认为逗号','
3.delimiter : 备选分隔符(如果指定该参数,则sep参数失效)
4.header:指定哪一行作为表头。默认设置为0(即第一行作为表头),如果没有表头的话,设置header=None
5.names:指定列的名称,用列表表示。一般我们没有表头,即header=None时,这个用来添加列名就很有用啦!
6.index_col:指定哪一列数据作为行索引,可以是一列,也可以多列。多列的话,会看到一个分层索引
7.prefix:给列名添加前缀。如prefix="x",会出来"x1"、"x2"、"x3"酱纸
8.nrows : 需要读取的行数(从文件头开始算起)
9.encoding:乱码的时候用这个就是了,官网文档看看用哪个:
https://docs.python.org/3/library/codecs.html#standard-encodings
10.skiprows : 需要忽略的行数(从文件开始处算起),或需要跳过的行号列表(从0开始)。
简单读一下我们上面生成的文件:
path="C:/Users/Administrator/Desktop/num_for_name.csv"#我放在了桌面
aa=pd.read_csv(path,sep=',')
aa.head()
name num
0 John 446
1 Bob 485
2 Jessica 886
3 Bob 158
4 Jessica 94
读取其他格式的文件,和上面类似,已经告诉大家方式和方法,不再赘述:
pd.read_csv("num_for_name.txt") #读取文本文件
pd.read_excel("num_for_name.xlsx") #读取excel文件
pd.read_json("num_for_name.json") #读取json文件
pd.read_clipboard() #读取剪切板数据
二、【python 连接Mysql数据库】
import pymysql
#获取连接,关键字+值:
db=pymysql.connect(host='localhost',user='root',passwd='xxxxxx',db='aa')
#aa为新建的数据库库名,host为主机,user为用户,然后passwd为用户密码
cursor=db.cursor() #获取操作游标
cursor.execute('select version()') # #执行语句
data=cursor.fetchone() #从当前结果集中返回单条数据
print(data)
sql='''
create table k(
first_name varchar(50) not null,
last_name varchar(50),
age int,
sex char(1),
income float
)
'''
cursor.execute(sql)
db.commit()
db.close()
通过本文,你应该掌握了:
1、各类格式文件(包括:txt文件、excel文件、csv文件、json格式文件等等)的读取和导出
2、随机种子和随机数生成的几种方法,以及zip()函数的运用。
3、python连接数据库。
如果觉得本文对你有帮助,期待后期更新文章,请搜索下方公众号或者扫码关注:
公众号:ywq885889