python中数据处理是比较方便的,经常用的就是读写文件,提取数据等,本博客主要介绍其中的一些用法。Pandas是一个强大的分析结构化数据的工具集;它的使用基础是Numpy(提供高性能的矩阵运算);用于数据挖掘和数据分析,同时也提供数据清洗功能。
一、pandas读取csv文件
数据处理过程中csv文件用的比较多。
import pandas as pd data = pd.read_csv('F:/Zhu/test/test.csv')
下面看一下pd.read_csv常用的参数:
pandas.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=None, error_bad_lines=True, warn_bad_lines=True, skipfooter=0, doublequote=True, delim_whitespace=False, low_memory=True, memory_map=False, float_precision=None)
常用参数解释:read_csv与read_table常用的参数(更多参数查看官方手册):
filepath_or_buffer #需要读取的文件及路径 sep / delimiter 列分隔符,普通文本文件,应该都是使用结构化的方式来组织,才能使用dataframe header 文件中是否需要读取列名的一行,header=None(使用names自定义列名,否则默认0,1,2,...),header=0(将首行设为列名) names 如果header=None,那么names必须制定!否则就没有列的定义了。 shkiprows= 10 # 跳过前十行 nrows = 10 # 只去前10行 usecols=[0,1,2,...] #需要读取的列,可以是列的位置编号,也可以是列的名称 parse_dates = ['col_name'] # 指定某行读取为日期格式 index_col = None /False /0,重新生成一列成为index值,0表示第一列,用作行索引的列编号或列名。可以是单个名称/数字或由多个名称/数宇组成的列表(层次化索引) error_bad_lines = False # 当某行数据有问题时,不报错,直接跳过,处理脏数据时使用 na_values = 'NULL' # 将NULL识别为空值 encoding='utf-8' #指明读取文件的编码,默认utf-8
读取csv/txt/tsv文件,返回一个DataFrame类型的对象。
举例:
import pandas as pd data = pd.read_csv('F:/Zhu/test/test.csv') print(data) name age birth 0 zhu 20 2000.1.5 1 wang 20 2000.6.18 2 zhang 21 1999.11.11 3 zhu 22 1998.10.24
pandas用iloc,loc提取数据
提取行数据:
loc函数:通过行索引 “Index” 中的具体值来取行数据(如取"Index"为"A"的行)
iloc函数:通过行号来取行数据(如取第2行的数据)
import pandas as pd import numpy as np #创建一个Dataframe data = pd.DataFrame(np.arange(16).reshape(4, 4), index=list('abcd'), columns=list('ABCD')) print(data) A B C D a 0 1 2 3 b 4 5 6 7 c 8 9 10 11 d 12 13 14 15
loc提取'a'的行:
print(data.loc['a']) A 0 B 1 C 2 D 3 Name: a, dtype: int32
iloc提取第2行:
print(data.iloc[2]) A 8 B 9 C 10 D 11 Name: c, dtype: int32
提取列数据:
print(data.loc[:, ['A']])#取'A'列所有行,多取几列格式为 data.loc[:,['A','B']] A a 0 b 4 c 8 d 12
print(data.iloc[:, [0]]) A a 0 b 4 c 8 d 12
提取指定行,指定列:
print(data.loc[['a','b'],['A','B']]) #提取index为'a','b',列名为'A','B'中的数据 A B a 0 1 b 4 5
print(data.iloc[[0,1],[0,1]]) #提取第0、1行,第0、1列中的数据 A B a 0 1 b 4 5
提取所有行所有列:
print(data.loc[:,:])#取A,B,C,D列的所有行 print(data.iloc[:,:]) A B C D a 0 1 2 3 b 4 5 6 7 c 8 9 10 11 d 12 13 14 15
根据某个指定数据提取行:
print(data.loc[data['A']==0])#提取data数据(筛选条件: A列中数字为0所在的行数据) A B C D a 0 1 2 3
二、pandas写入csv文件
pandas将多组列表写入csv
import pandas as pd #任意的多组列表 a = [1,2,3] b = [4,5,6] #字典中的key值即为csv中列名 dataframe = pd.DataFrame({'a_name':a,'b_name':b}) #将DataFrame存储为csv,index表示是否显示行名,default=True dataframe.to_csv("test.csv",index=False,sep=',')
结果:
如果你想写入一行,就是你存储的一个列表是一行数据,你想把这一行数据写入csv文件。
这个时候可以使用csv方法,一行一行的写
import csv with open("test.csv","w") as csvfile: writer = csv.writer(csvfile) #先写入columns_name writer.writerow(["index","a_name","b_name"]) #写入一行用writerow #write.writerow([0,1,2]) #写入多行用writerows writer.writerows([[0,1,3],[1,2,3],[2,3,4]])
可以看到,每次写一行,就自动空行,解决办法就是在打开文件的时候加上参数newline=''
import csv with open("F:/zhu/test/test.csv","w", newline='') as csvfile: writer = csv.writer(csvfile) #先写入columns_name writer.writerow(["index","a_name","b_name"]) #写入多行用writerows writer.writerows([[0,1,3],[1,2,3],[2,3,4]])
写入txt文件类似
(1)创建txt数据文件,创建好文件记得要关闭文件,不然读取不了文件内容
(2)读取txt文件
#读取txt文件 file=open("G:\\info.txt",'r',encoding='utf-8') userlines=file.readlines() file.close() for line in userlines: username=line.split(',')[0] #读取用户名 password=line.split(',')[1] #读取密码 print(username,password)
三、pandas查看数据表信息
1)查看维度:data.shape
import pandas as pd data = pd.read_csv('F:/Zhu/test/test.csv') print(data) print(data.shape) index a_name b_name 0 0 1 3 1 1 2 3 2 2 3 4 (3, 3)
2)查看数据表基本信息:data.info
import pandas as pd data = pd.read_csv('F:/Zhu/test/test.csv') print(data) print(data.info) index a_name b_name 0 0 1 3 1 1 2 3 2 2 3 4 <bound method DataFrame.info of index a_name b_name 0 0 1 3 1 1 2 3 2 2 3 4>
3)查看每一行的格式:data.dtype
import pandas as pd data = pd.read_csv('F:/Zhu/test/test.csv') print(data.dtypes) index int64 a_name int64 b_name int64 dtype: object
4)查看前2行数据、后2行数据
df.head() #默认前10行数据,注意:可以在head函数中填写参数,自定义要查看的行数 df.tail() #默认后10 行数据
import pandas as pd data = pd.read_csv('F:/Zhu/test/test.csv') print(data) print(data.head(2)) print(data.tail(2)) index a_name b_name 0 0 1 3 1 1 2 3 2 2 3 4 index a_name b_name 0 0 1 3 1 1 2 3 index a_name b_name 1 1 2 3 2 2 3 4
四、数据清洗
1)NaN数值的处理:用数字0填充空值
data.fillna(value=0,inplace=True)
注意:df.fillna不会立即生效,需要设置inplace=True
2)清除字符字段的字符空格
字符串(str)的头和尾的空格,以及位于头尾的\n \t之类给删掉
data['customername']=data['customername'].map(str.strip)#如清除customername中出现的空格
3)大小写转换
data['customername']=data['customername'].str.lower()
4)删除重复出现的值
data.drop_duplicates(['customername'],inplace=True)
5)数据替换
data['customername'].replace('111','qqq',inplace=True)
参考:
《Python之pandas简介》
《Pandas中loc和iloc函数用法详解(源码+实例) 》
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新动态
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]