纯文本,使用某个字符集,比如都是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中的二位数组的操作是近似的