一.取值
1.取i行j列的单元格:
df.iloc[[i], [j]] 取出后为df
df.iloc[[i], [j]].values[0][0] 先取出df,随后取df二维数组的值
df.iloc[i, j] 直接取值
2.取某几行
df.iloc[i:j]
3.取某几列
df.iloc[:,i:j]
df.loc[:, ['column_name_1', 'column_name_2']]
df[['column_name_1', 'column_name_2']]
4.取某几行某几列
df.iloc[i:j,k:l]
5.取不连续的某几行某几列
df.iloc[[i, k, j],[l, k]]
6.取某一列
df.iloc[,[i]] 取出后为df
df.iloc[, i] 取出后为series
df.column_name 取单列,取出后为series
df['column_name'] 取单列,取出后为series
df[['column_name']] 取单列,取出后为df
7.取某一行
df.iloc[[i]] 取出后为df
df.iloc[i] 取出后为series
8.获取df数据类型
df.info() 获取数据表基本信息(维度、列名称、数据格式、所占空间等)
df.shape 获取df行数和列数,以元组返回
df.dtypes 获取df数据类型,注意无括号
df['column_name'].dtype 获取某一列的数据类型
二.iloc与loc的异同:
1.iloc与loc行操作相同
2.iloc的列不能用列标签;loc的列只能用列标签,不能用索引或切片,除非用全切片
3.iloc左闭右开;loc左闭右闭*
三.一些常用的Pandas使用
series_name.to_frame() 将series转换为Dataframe
四.一些知识点
python缺失值有4种:
1)Python内置的None值显示为None,使用df[‘date’].isnull()进行判断是否为空值。
2)Pandas中缺失值表示为NA,表示不可用not available。
3)Pandas对于数值数据,pandas使用浮点值NaN(Not a Number)表示缺失数据。
4)Pandas对于日期数据,pandas使用浮点值NaT(Not a Timestamp)表示缺失数据。
对缺失值进行填充:
df['column_name'] = df['column_name'].fillna('') 对缺失列进行填充
df = df.fillna('') 对df所有缺失列值进行填充
df = df.fillna('').iloc[0:10, 0:5] 对df指定值进行填充
对NaT缺失值进行操作:
df['column_name'] = df['column_name'].fillna('1900-01-01 00:00:00')
向量化操作:
# 方法一:使用lambda
df.column_name= df.column_name.apply(lambda x: (str(x)).split('.')[0])
# 方法二:使用自定义方法
def replace_category_value(参数):
参数 使用相关代码
return
df.column_name= df.column_name.apply(replace_category_value)
转换数据类型
s.astype('float') 强制将Series中的数据类型更改为float类型
df['column_name'].astype('int64') 强制将df中的某列转换为int64类型
pd.to_datetime(df['column_name']) 将某列转为时间类型
替换
s.replace(1,'first') Series用‘first’代替所有等于1的值(替换的是值,不是列名也不是索引名)
s.replace([1,3],['one','three']) Series用'one'代替1,用'three'代替3
df[col].replace(1,1.0,inplace=True) df指定列中的值1用1.0替换
df.replace([1,3],['one','three']) df中用'one'代替1,用'three'代替3
删除某一列
del df['column_name'] 删除某一列(只能删除一列)
将某一列转为list
list_a = df['column_name'].tolist()
排序(一列或多列(如果所有列名都传入则是按全部列排序))
dataframe.sort_values(by=columns, inplace=True)
索引
set_index(keys='column_name') 将数据表中指定的某列设置为索引或复合索引
keys:列标签或列标签/数组列表,需要设置为索引的列
drop:默认为True,删除用作新索引的列,也就是当把某列设置为索引后,原来的列会移除
append:是否将列附加到现有索引,默认为False
inplace:输入布尔值,表示当前操作是否对原数据生效,默认为False
reset_index(inplace=True, drop=True) 将数据表中的索引还原为普通列并重新变为默认的整型索引
level:数值类型可以为:int、str、tuple或list,默认无,仅从索引中删除给定级别。默认情况下移除所有级别。控制了具体要还原的那个等级的索引
drop:当指定drop=False(默认为False)时,则索引列会被还原为普通列;否则,如设置为True,原索引列被会丢弃
inplace:输入布尔值,表示当前操作是否对原数据生效,默认为False
df.reindex([index_1, index_2, index_3]) 对行重置索引
df.reindex(columns=['column_name_1','column_name_2','column_name_3']) 对列重置索引
df.reindex([index_1,index_2,index_3],columns=['column_name_1','column_name_2','column_name_3']) 同时对行和列进行重索引
dataframe中执行sql
from pandasql import sqldf
def sample(file_name, sheet_name, skiprows):
file = os.path.join(FILE_DIRECTORY, file_name)
df_1 = get_file_content(file=file, sheet_name=sheet_name, skiprows=skiprows)
sql = 'select * from df_1 where Status == "Request Approved" '
df_2 = sqldf(sql)
return df_2
直接获取dataframe列名的list
list_a = list(df_1)
两个df比较的常用方法
使用datacompy包即可
import datacompy
c = datacompy.Compare(df, df2, join_columns=['a', 'b', 'c']) # join_columns 类似主键,会根据这些列join, 可传入多个值作为联合主键
print(c.report(sample_count=1000, column_count=1000)) # 可通过sample_count, column_count设置report展示的最大行数
Pandas教程
Link