纯文本,使用某个字符集,比如都是ASCII、Unicode、EBCDIC或GB2312(简体中文环境)等;
由记录组成(典型的是每行一条记录)
每条记录被分隔符(英语:Delimiter)分隔为字段(英语:Field(computer science))(典型分隔符号有逗号、分号或制表符;有时分隔符可以包括可选的空格)
每条记录都有同样的字段序列
import pandas as pd
import numpy as np
abs_path = r'F:\Python\learn\python附件\pythonCsv\data.csv'
df = pd. read_csv( abs_path, encoding= 'gbk' )
df. head( 2 )
序号
姓名
性别
语文
数学
英语
物理
化学
生物
0
1
渠敬辉
男
80
60
30
40
30
60
1
2
韩辉
男
90
95
75
75
80
85
type ( df)
pandas.core.frame.DataFrame
DataFrame
print ( df. columns)
print ( df. index)
Index(['序号', '姓名', '性别', '语文', '数学', '英语', '物理', '化学', '生物'], dtype='object')
RangeIndex(start=0, stop=7, step=1)
df. loc[ 0 ]
序号 1
姓名 渠敬辉
性别 男
语文 80
数学 60
英语 30
物理 40
化学 30
生物 60
Name: 0, dtype: object
a = np. array( range ( 10 ) )
a > 3
array([False, False, False, False, True, True, True, True, True,
True])
df[ df. 数学 > 80 ]
序号
姓名
性别
语文
数学
英语
物理
化学
生物
1
2
韩辉
男
90
95
75
75
80
85
3
4
石天洋
男
90
90
95
80
75
80
df[ df. 数学 < 80 ]
序号
姓名
性别
语文
数学
英语
物理
化学
生物
0
1
渠敬辉
男
80
60
30
40
30
60
4
5
张三
男
60
60
60
60
60
60
6
7
王五
男
70
70
70
70
70
70
df[ ( df. 语文 > 80 ) & ( df. 数学 > 80 ) & ( df. 英语 > 80 ) ]
序号
姓名
性别
语文
数学
英语
物理
化学
生物
3
4
石天洋
男
90
90
95
80
75
80
排序
df. sort_values( [ '数学' , '语文' , '英语' ] ) . head( )
序号
姓名
性别
语文
数学
英语
物理
化学
生物
4
5
张三
男
60
60
60
60
60
60
0
1
渠敬辉
男
80
60
30
40
30
60
6
7
王五
男
70
70
70
70
70
70
5
6
李四
女
80
80
80
80
80
80
2
3
韩文晴
女
95
80
85
60
80
90
访问
df. loc[ 3 ]
序号 4
姓名 石天洋
性别 男
语文 90
数学 90
英语 95
物理 80
化学 75
生物 80
Name: 3, dtype: object
索引
scores = {
'英语' : [ 90 , 78 , 89 ] ,
'数学' : [ 64 , 78 , 45 ] ,
'姓名' : [ 'wong' , 'li' , 'sun' ]
}
df = pd. DataFrame( scores, index= [ 'one' , 'two' , 'three' ] )
df
英语
数学
姓名
one
90
64
wong
two
78
78
li
three
89
45
sun
df. index
Index(['one', 'two', 'three'], dtype='object')
df. loc[ 'one' ]
英语 90
数学 64
姓名 wong
Name: one, dtype: object
df. iloc[ 0 ]
英语 90
数学 64
姓名 wong
Name: one, dtype: object
df. ix[ 0 ]
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-22-413c174d3cd1> in <module>
1 # 合并了loc和iloc的功能
----> 2 df.ix[0]
G:\Anaconda\lib\site-packages\pandas\core\generic.py in __getattr__(self, name)
5272 if self._info_axis._can_hold_identifiers_and_holds_name(name):
5273 return self[name]
-> 5274 return object.__getattribute__(self, name)
5275
5276 def __setattr__(self, name: str, value) -> None:
AttributeError: 'DataFrame' object has no attribute 'ix'
df. loc[ : 2 ]
序号
姓名
性别
语文
数学
英语
物理
化学
生物
0
1
渠敬辉
男
80
60
30
40
30
60
1
2
韩辉
男
90
95
75
75
80
85
2
3
韩文晴
女
95
80
85
60
80
90
df. ix[ : 2 ]
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-33-a97de2692f80> in <module>
1 #当索引为数字索引的时候,ix和loc是等价的
----> 2 df.ix[:2]
G:\Anaconda\lib\site-packages\pandas\core\generic.py in __getattr__(self, name)
5272 if self._info_axis._can_hold_identifiers_and_holds_name(name):
5273 return self[name]
-> 5274 return object.__getattribute__(self, name)
5275
5276 def __setattr__(self, name: str, value) -> None:
AttributeError: 'DataFrame' object has no attribute 'ix'
df[ : 2 ]
序号
姓名
性别
语文
数学
英语
物理
化学
生物
0
1
渠敬辉
男
80
60
30
40
30
60
1
2
韩辉
男
90
95
75
75
80
85
df. 数学. values
array([60, 95, 80, 90, 60, 80, 70], dtype=int64)
df. 数学. value_counts( )
60 2
80 2
95 1
70 1
90 1
Name: 数学, dtype: int64
new = df[ [ '数学' , '语文' ] ] . head( )
new
数学
语文
0
60
80
1
95
90
2
80
95
3
90
90
4
60
60
new * 2
数学
语文
0
120
160
1
190
180
2
160
190
3
180
180
4
120
120
重点
def func ( score) :
if score>= 80 :
return '优秀'
elif score>= 70 :
return '良'
elif score>= 60 :
return '及格'
else :
return '不及格'
pass
df[ '数学分类' ] = df. 数学. map ( func)
df. head( )
序号
姓名
性别
语文
数学
英语
物理
化学
生物
数学分类
0
1
渠敬辉
男
80
60
30
40
30
60
及格
1
2
韩辉
男
90
95
75
75
80
85
优秀
2
3
韩文晴
女
95
80
85
60
80
90
优秀
3
4
石天洋
男
90
90
95
80
75
80
优秀
4
5
张三
男
60
60
60
60
60
60
及格
def func ( number) :
return number + 10
func = lambda number : number + 10
df. applymap( lambda x : str ( x) + ' - ' ) . head( 2 )
序号
姓名
性别
语文
数学
英语
物理
化学
生物
数学分类
0
1 -
渠敬辉 -
男 -
80 -
60 -
30 -
40 -
30 -
60 -
及格 -
1
2 -
韩辉 -
男 -
90 -
95 -
75 -
75 -
80 -
85 -
优秀 -
匿名函数
[ i+ 100 for i in range ( 10 ) ]
[100, 101, 102, 103, 104, 105, 106, 107, 108, 109]
def func ( x) :
return x + 100
list ( map ( func, range ( 10 ) ) )
[100, 101, 102, 103, 104, 105, 106, 107, 108, 109]
list ( map ( lambda x : x+ 100 , range ( 10 ) ) )
[100, 101, 102, 103, 104, 105, 106, 107, 108, 109]
df[ 'new_score' ] = df. apply ( lambda x : x. 数学 + x. 语文, axis= 1 )
df. head( 2 )
df. tail( 2 )
序号
姓名
性别
语文
数学
英语
物理
化学
生物
数学分类
new_score
5
6
李四
女
80
80
80
80
80
80
优秀
160
6
7
王五
男
70
70
70
70
70
70
良
140
panda中的dataframe的操作,很大一部分跟numpy中的二位数组的操作是近似的