python读取csv文件

一、通过导入CSV模块
如下代码示例:

import csv
filename="Example.csv"
with open(filename) as f:
    render=csv.reader(f) # reader(迭代器对象)--> 迭代器对象
    header_row = next(render)
    print(header_row)
    print(len(header_row))

输出的只是一个文件对象,并不是我们需要打印的数字类型的~,所以我们需要遍历这个文件,可以输出该文件每一行的信息,也可以直接输出全部信息:

content=[] #用来存储整个文件的数据,存成一个列表,列表的每一个元素又是一个列表,表示的是文件的某一行

for line in file:
    print(line) #打印文件每一行的信息
    content.append(line)
print("该文件中保存的数据为:\n",content)

二、通过导入panda 模块
对于csv文件进行处理一个重要的步骤是为数据添加索引,方便后续的数据操作,这里我们使用pandas库中的read_csv()函数,在读取csv数据的同时可以对其添加行索引和列索引。

import pandas as pd
file=pd.read_csv('Example.csv')
print(file) #打印CSV文件所有字符,空格隔开

read_csv()不对属性进行设置的缺省状态下,对于csv文件进行读取操作后,即使原来的数据存在索引,也会自动添加数字的行索引和列索引。

obj=pd.read_csv(‘testdata.csv‘,header=None,names=range(1,1200))
'''当设置 header=None 时,则认为csv文件没有列索引,为其添加相应范围的索引,
range(1,1200)指建立索引号从1开始最大到1199的列索引,
当数据长度超过范围时,索引沿列数据的右侧对齐。'''
obj=pd.read_csv(‘testdata.csv‘,header=0,names=range(1,4))
'''当设置 header=0 时,则认为csv文件数据第一行是列索引,将用新的列索引替换旧的列索引。'''
obj=pd.read_csv(‘testdata.csv‘,index_col=0,usecols=[1,2,3])
'''当设置 index_col=0 时,则是csv文件数据的指定数据中的第一列是行索引,
usecols指选中数据的对应列数,[1,2,3]指第2列到第4列。'''
obj=pd.read_csv(‘testdata.csv‘,index_col=0,usecols=5)
#用usecols选择前n行数据进行后续处理,n为正整型。

此时读取的数据类型为:pandas.core.frame.DataFrame
如何对该文件类型进行索引:
在对Series对象和DataFrame对象进行索引的时候要明确这么一个概念:是使用下标进行索引,还是使用关键字进行索引。比如list进行索引的时候使用的是下标,而dict索引的时候使用的是关键字。

使用下标索引的时候下标总是从0开始的,而且索引值总是数字。而使用关键字进行索引,关键字是key里面的值,既可以是数字,也可以是字符串等。
Series对象介绍:
Series对象是由索引index和值values组成的,一个index对应一个value。其中index是pandas中的Index对象。values是numpy中的数组对象。如:

import pandas as pd
s1 = pd.Series([2,3,4,5], index=['a', 'b', 'c', 'd'])
print(s1)
结果:
a    2
b    3
c    4
d    5
dtype: int64

print(s1.index)
结果:
Index(['a', 'b', 'c', 'd'], dtype='object')

print(s1.values)
结果:
[2 3 4 5]

如何对Series对象进行索引
1、使用index中的值进行索引:

print(s1['a'])
结果:

print(s1[['a','d']])
结果:
a    2
d    5
dtype: int64


print(s1['b':'d'])
结果(注意,切片索引保存最后一个值):
b    3
c    4
d    5
dtype: int64

2、使用下标进行索引

print(s1[0])
结果:

print(s1[[0,3]])
结果:
a    2
d    5
dtype: int64

print(s1[1:3])
结果(注意:这里和上面不同的是不保存最后一个值,与正常索引相同):
b    3
c    4
dtype: int64

DataFrame对象介绍:
DataFrame对象是一个由行列组成的表。DataFrame中行由columns组成,列由index组成,它们都是Index对象。它的值还是numpy数组。

data = {'name':['ming', 'hong', 'gang', 'tian'], 'age':[12, 13, 14, 20], 'score':[80.3, 88.2, 90, 99.9]}
df1 = pd.DataFrame(data)

print(df1.index)
结果:
RangeIndex(start=0, stop=4, step=1)

print(df1.columns)
结果:
Index(['age', 'name', 'score'], dtype='object')

print(df1.values)
结果:
[[12 'ming' 80.3]
 [13 'hong' 88.2]
 [14 'gang' 90.0]
 [20 'tian' 99.9]]

如何对DataFrame对象进行索引
1:使用columns的值对列进行索引

直接使用columns中的值进行索引,得到的是一列或者是多列的值

print(df1['name'])
结果:
   ming
   hong
   gang
   tian
Name: name, dtype: object

print(df1[['name','age']])
结果:
name  age
 ming   12
 hong   13
 gang   14
 tian   20

注意:不可以直接使用下标对列进行索引,除非该columns当中包含该值。如下面的操作是错误的
print(df1[0])
结果: 错误

2:切片或者布尔Series对行进行索引

使用切片索引,或者布尔类型Series进行索引:

print(df1[0:3])
使用切片进行选择,结果:
age  name  score
  12  ming   80.3
  13  hong   88.2
  14  gang   90.0

print(df1[ df1['age'] > 13 ])
使用布尔类型Series进行索引,其实还是要求布尔Series和DataFrame有相同的index,结果:
age  name  score
  14  gang   90.0
  20  tian   99.9

3:使用loc和iloc进行索引

本质上loc是用index和columns当中的值进行索引,而iloc是不理会index和columns当中的值的,永远都是用从0开始的下标进行索引。所以当你搞懂这句话的时候,下面的索引就会变得非常简单:

print(df1.loc[3])
结果:
name     hong
score    88.2
Name: 3, dtype: object

print(df1.loc[:,'age'])
结果:
   12
   13
   14
   20
Name: age, dtype: int64

print(df1.iloc[3])
结果:
age        20
name     tian
score    99.9
Name: 5, dtype: object

print(df1.iloc[:,1])
结果:
   ming
   hong
   gang
   tian
Name: name, dtype: object
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值