查看原文
其他

【Python菜鸟进阶大神】Pandas_003:读取/存储各类格式数据文件

杨文强 Python数据科学修炼之路 2021-08-09

        在公司用的最多的就是.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])


Bnp.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 =112 * 22 =443 * 33 =994 * 44 =176

★★生成1000个名字列表:

names = ['Bob','Jessica','Mary','John','Mel'] #定义一个姓名列表In [2]:import numpy as npname_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 pddf=pd.DataFrame(data=list(v),columns=['name',"num"])df[:10] name num0 John 4461 Bob 4852 Jessica 8863 Bob 1584 Jessica 9445 Jessica 2506 Mary 6097 John 6858 John 5019  Bob  577

★★用将上述数据保存,导出为txt文件:

df.to_csv('num_for_name.txt',header=True,index=False)

可以利用Python的help()函数查看相关的参数:from pandas import DataFramehelp(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 pdhelp(pd.read_csv)  #通过帮助命令,查看APIread_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 num0 John 4461 Bob 4852 Jessica 8863 Bob 1584 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



    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存