5 用Pandas库处理数据(读/写文件的练习)

5.1 Python自带的CSV模块

csv.reader(csvfile, dialect='excel, **fmtparams'):用于读取文件返回一个reader对象用于CSV文件内容上进行迭代。参数说明:

  • csvfile:文件对象或list对象
  • dialect:指定CSV文件格式
  • fmtparams:一系列参数列表,用于设置特定的格式,以覆盖dialect中的格式
import csv
# 以只读模式打开test.csv文件,并用csv.reader()方式读取
csvFile = open('test.csv', 'r', encoding='utf-8-sig')
data = csv.reader(csvFile)
# 打印data发现是地址
print(data)  # 结果为:<_csv.reader object at 0x0000021BF610BE80>
# 需要用循环语句进行输出,并且是以一行一行列表形式输出
for i in data:
    print(i)
'''
['姓名', '年龄', '学号', '英语', '数学', 'Python', '面向对象']
['aaa', '18', '101', '90', '80', '90', '85']
['bbb', '18', '102', '62', '90', '85', '88']
['ccc', '19', '103', '85', '87', '75', '98']
['ddd', '18', '104', '75', '65', '65', '69']
['eee', '18', '105', '86', '63', '88', '78']
['fff', '19', '106', '74', '84', '96', '86']
['ggg', '19', '107', '60', '60', '67', '66']
['hhh', '18', '108', '76', '95', '78', '70']
'''
# 创建CSV文件并写入
csvFile1 = open('1.csv', 'w', encoding='utf-8-sig')
# 使用csv.write()来写入
write = csv.writer(csvFile1)
# 单行写入
write.writerow([1, 1, 'hhh', 'lll'])
# 定义多行
rows = [[2, 2, 'hhh', 'lll'], [3, 3, 'hhh', 'lll']]
write.writerows(rows)
# 读取并显示内容
csvFile1 = open('1.csv', 'r', encoding='utf-8-sig')
data1 = csv.reader(csvFile1)  # 地址:<_csv.reader object at 0x0000023802B4C520>
print(data1)
for j in data1:
    print(j)
'''
['1', '1', 'hhh', 'lll']
[]
['2', '2', 'hhh', 'lll']
[]
['3', '3', 'hhh', 'lll']
[]
'''

如果想在原来文件的基础上追加则可以这样写

csvFile = open('1.csv', 'add')

但是Python自带的CSV模块是远远不够处理CSV文件的。

5.2 使用Pandas库处理CSV文件

在前面一个笔记里有讲过通过读取CSV文件创建DataFrame对象,但是就举了一点例子,在这一小节多举一些例子,熟悉读取/写入数据。

5.2.1 read_csv()方法例子

import pandas as pd
df = pd.read_csv('test.csv', encoding='utf-8')
# head()方法默认打印前5行,设置参数3则是打印前三行
print(df.head(3))
'''
    姓名  年龄   学号  英语  数学  Python  面向对象
0  aaa  18  101  90  80      90    85
1  bbb  18  102  62  90      85    88
2  ccc  19  103  85  87      75    98
'''

5.2.2 查看列数、维度和切片操作

打印列的表头

import pandas as pd
df = pd.read_csv('test.csv', encoding='utf-8')
print(df.columns)
# 结果为:Index(['姓名', '年龄', '学号', '英语', '数学', 'Python', '面向对象'], dtype='object')

显示维度(几行几列),利用shape属性,与NumPy库中的shape作用一样

# 接上面的代码
print(df.shape)  # 结果为:(8, 7),8行7列

利用loc[]指定index的具体值(loc[2:4]表示取index=2到index=4范围的值,参数可以是字符串等),iloc[]:从0行算,到第几行,不看index的具体值(iloc[2:4]表示取第2行到第3行的值,且参数只能是整数)

import pandas as pd
df = pd.read_csv('test.csv', encoding='utf-8')
print(df)
'''
    姓名  年龄   学号  英语  数学  Python  面向对象
0  aaa  18  101  90  80      90    85
1  bbb  18  102  62  90      85    88
2  ccc  19  103  85  87      75    98
3  ddd  18  104  75  65      65    69
4  eee  18  105  86  63      88    78
5  fff  19  106  74  84      96    86
6  ggg  19  107  60  60      67    66
7  hhh  18  108  76  95      78    70
'''
print(df.loc[2:4])
'''
    姓名  年龄   学号  英语  数学  Python  面向对象
2  ccc  19  103  85  87      75    98
3  ddd  18  104  75  65      65    69
4  eee  18  105  86  63      88    78
'''
print(df.iloc[2:4])
'''
    姓名  年龄   学号  英语  数学  Python  面向对象
2  ccc  19  103  85  87      75    98
3  ddd  18  104  75  65      65    69
'''

5.2.3 读取特定的列以及列的改值操作

import pandas as pd
df = pd.read_csv('test.csv', encoding='utf-8')
print(df[['姓名', '学号']])
'''
    姓名   学号
0  aaa  101
1  bbb  102
2  ccc  103
3  ddd  104
4  eee  105
5  fff  106
6  ggg  107
7  hhh  108
'''
c = df[['英语']]/10
print(df[['英语']])
'''
   英语
0  90
1  62
2  85
3  75
4  86
5  74
6  60
7  76
'''
df[['英语']] = c
print(df[['英语']])
'''
    英语
0  9.0
1  6.2
2  8.5
3  7.5
4  8.6
5  7.4
6  6.0
7  7.6
'''

5.2.4 求某一列的最大值、最小值、算数平均数以及数据的排序

import pandas as pd
df = pd.read_csv('test.csv', encoding='utf-8')
print(df['Python'].max())  # 结果为:96
print(df['Python'].min())  # 结果为:65
print(df['Python'].mean())  # 结果为:80.5
# ascend参数控制升序(True)还是降序(False),inplace为True时会覆盖数据,False则是单纯打印数据
# 升序
print(df.sort_values('Python', inplace=False, ascending=True))
'''
    姓名  年龄   学号   英语  数学  Python  面向对象
3  ddd  18  104  7.5  65      65    69
6  ggg  19  107  6.0  60      67    66
2  ccc  19  103  8.5  87      75    98
7  hhh  18  108  7.6  95      78    70
1  bbb  18  102  6.2  90      85    88
4  eee  18  105  8.6  63      88    78
0  aaa  18  101  9.0  80      90    85
5  fff  19  106  7.4  84      96    86
'''
# 降序
print(df.sort_values('Python', inplace=False, ascending=False))
'''
   姓名  年龄   学号   英语  数学  Python  面向对象
5  fff  19  106  7.4  84      96    86
0  aaa  18  101  9.0  80      90    85
4  eee  18  105  8.6  63      88    78
1  bbb  18  102  6.2  90      85    88
7  hhh  18  108  7.6  95      78    70
2  ccc  19  103  8.5  87      75    98
6  ggg  19  107  6.0  60      67    66
3  ddd  18  104  7.5  65      65    69
'''

5.2.5 写入操作——to_csv()方法

import pandas as pd
file = pd.read_csv('test.csv')
file = file.head(5)
print(file)
'''
    姓名  年龄   学号  英语  数学  Python  面向对象
0  aaa  18  101  90  80      90    85
1  bbb  18  102  62  90      85    88
2  ccc  19  103  85  87      75    98
3  ddd  18  104  75  65      65    69
4  eee  18  105  86  63      88    78
'''
file.to_csv('test1.csv')  # 会生成一个text1.csv文件

5.3 处理非.csv格式的数据

5.3.1 读取TXT文件

因为.csv文件是以相同的分隔符分隔各个数据,要把txt文件转化为CSV文件需要满足8条要求:

(1)开头不留空,以行为单位;

(2)可含或不含列名,若含列名则位于文件第1行;

(3)一行数据不跨行,无空行;

(4)以半角逗号作为分隔符,即便列为空也要用空格表达其存在;

(5)列内容若存在半角引号,则将其替换成半角双引号转义;

(6)编码格式不限,可为ASCII、Unicode或其他

(7)不支持数字;

(8)不支持特殊字符

(感觉好麻烦,不如还是用excel吧[/狗头])

5.3.2 读取Excel文件

使用read_excel(io, sheet_name=0, skiprows=None等参数)方法读取文件,一些参数说明:

  • sheet_name:从0开始计数,表示要打开的Excel表有多少张工作表
  • skiprows:跳过特定行,skiprows = n跳过前n行;skiprows = [a, b, c],表示跳过a+1,b+1,c+1行
  • nrows:读取前n行
  • skipfooter:跳过表格后的n行
import pandas as pd
# 如果没有添加openpyxl
# 方法一:在cmd里输入pip  install openpyxl
# 方法二:下载pandas包一样,找到openpyxl包并下载就可以了
file = pd.read_excel('pandas_test.xlsx')
print(file.head())
'''
    姓名  年龄   学号  班级
0  aaa  18  101  1班
1  bbb  18  102  1班
2  ccc  19  103  2班
3  ddd  18  104  1班
4  eee  18  105  3班
'''
file1 = pd.read_excel('pandas_test.xlsx', skiprows=5)
print('跳过前5行:')
print(file1)
'''
跳过前5行:
    eee  18  105   3班
0   fff  19  106   3班
1   ggg  19  107   2班
2   hhh  18  108   3班
3   aaa  18  109   1班
4   bbb  18  110   2班
5   ccc  18  111   3班
6   ddd  18  112   4班
7   eee  18  113   5班
8   fff  18  114   6班
9   ggg  18  115   7班
10  hhh  18  116   8班
11  aaa  18  117   9班
12  bbb  18  118  10班
13  ccc  18  119  11班
14  ddd  18  120  12班
'''
file2 = pd.read_excel('pandas_test.xlsx', skipfooter=5)
print('跳过后6行(5+1):')
print(file2)
'''
跳过后6行(5+1):
     姓名  年龄   学号  班级
0   aaa  18  101  1班
1   bbb  18  102  1班
2   ccc  19  103  2班
3   ddd  18  104  1班
4   eee  18  105  3班
5   fff  19  106  3班
6   ggg  19  107  2班
7   hhh  18  108  3班
8   aaa  18  109  1班
9   bbb  18  110  2班
10  ccc  18  111  3班
11  ddd  18  112  4班
12  eee  18  113  5班
13  fff  18  114  6班
14  ggg  18  115  7班
'''

从这Python数据分析从小白到专家_百度百科本书上学的知识

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秃头少女Emily

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值