数据载入及初步观察,探索性分析
载入和观察
相对路径和绝对路径
- 查看当前工作目录使用
os.getcwd()
,改变当前工作目录os.chdir(路径)
,获得当前目录的绝对路径命令os.path.abspath('.')
- 相对路径就是在当前工作目录下的文件,可以直接打开
data = pd.read_csv('train.csv')
- 绝对路径就是可以使用任何文件路径,
- 因为反斜杠
\
用作转义字符,所以要使用双斜杠\\
- 使用原始字符串
r
+路径,在路径前加上r
,如:data = pd.read_csv(r'E:\数分学习\hands-on-data-analysis-master\第一单元项目集合\train.csv')
, - 使用
/
,如:data = pd.read_csv(r'E:/数分学习\hands-on-data-analysis-master/第一单元项目集合/train.csv')
, read_csv
和read_table
,不同处之一是前者使用,
作为字段分隔符,后者使用制表符(空格回车换行等),要想使得读取的数据格式一样,使用read_table(文件,sep = ',')
- 数据量过大时候,为避免内存不足,使用分块读取,返回的类型为
Textfilereader
不再是dataframe
,
data = pd.read_csv('train.csv', chunkersize = 100) #每100行读取一次
for piece in data
print(piece) #分块读取全部数据,在for循环内进行数据处理
data.get_chunk() # 读取一块
修改列名
data.rename(columns={'PassengerId' : '乘客ID','Survived' : '是否幸存', 'Pclass' : '乘客等级(1/2/3等舱位)'}) #不改变原始数据内容,需要赋值给新的变量,假如直接修改源数据,请添加inplace = True
newcolums = ['乘客ID', '是否幸存', '乘客等级(1/2/3等舱位)']
data.columns = newcolunms # 直接修改了原始数据的列名
data = pd.read_csv('train.csv', names = newcolumns) #读取数据时直接重新命名列
查看数据的基本信息
df.info(): # 打印摘要
df.describe(): # 描述性统计信息
df.values: # 数据 <ndarray>
df.to_numpy() # 数据 <ndarray> (推荐)
df.shape: # 形状 (行数, 列数)
df.columns: # 列标签 <Index>
df.columns.values: # 列标签 <ndarray>
df.index: # 行标签 <Index>
df.index.values: # 行标签 <ndarray>
df.head(n): # 前n行
df.tail(n): # 尾n行
pd.options.display.max_columns=n: # 最多显示n列
pd.options.display.max_rows=n: # 最多显示n行
df.memory_usage(): # 占用内存(字节B)
查看空值
#判断数据是否为空,为空的地方返回True,其余地方返回False
data.isnull().head()
# 查看所有输入是否有空值,有返回True,否则返回False
data1.isnull().values.any()
# 查看每一列是否有NaN:
df.isnull().any(axis=0)
# 查看每一行是否有NaN:
df.isnull().any(axis=1)
数据保存
data.to_csv('train_chinese.csv', encoding= 'GBK')
pandas基础
查看数据列名
# 链表推导式
[conlumns for conlumns in df]
# 直接list list(df) #columns属性返回index 可以通过tolist转为list df.columns.tolist()
看看数据的列和行
df['w'] #选择表格中的'w'列,使用类字典属性,返回的是Series类型
df.w #选择表格中的'w'列,使用点属性,返回的是Series类型
df[['w']] #选择表格中的'w'列,返回的是DataFrame属性
data[0:2] #返回第1行到第2行的所有行,前闭后开,包括前不包括后
data[1:2] #返回第2行,从0计,返回的是单行,通过有前后值的索引形式,
data.iloc[-1] #选取DataFrame最后一行,返回的是Series
data.iloc[-1:] #选取DataFrame最后一行,返回的是DataFrame
查看具体数据
# 查看具体的数据,loc 是根据index查找;iloc是根据行号,列号,从0开始逐次加1
midage.loc[[100,105,108],['性别','客舱','乘客姓名']]
midage.iloc[[100,105,108],[3,4,10]]
删除行或者列
# axis默认等于0,即按行删除,这里表示按行删除第1行和第三行,inplace = True 会对原数据修改
df1.drop(labels=[1,3])
df1.drop(labels=range(1:4)) #删除第1行到第三行
# axis=1 表示按列删除,删除多列
df1.drop(labels=[列名,列名],axis=1)
df.drop([列名, 列名], axis=1)
df.drop(columns=[列名, 列名])
#删除多索引的dataframe中特定的索引组合
df.drop(index='cow', columns='small')
df.drop(index=('falcon', 'weight'))
df.drop(index='length', level=1)
#删除列的其他方法
del df[列名]
df.pop(列名)
条件筛选以及交并集操作
data[(data["a"]>2) & (data["b"]<9)] # 交集 &
data[(data["a"]>2) | (data["b"]<9)] # 并集 |
data[~(data["a"]>2)] # 补集 ~
#isin(序列):选出在序列中的数据
lis = [3, 4]
data[data['a'].isin(lis)]
# 对称差集:^属于集合A和B的并集但不属于A和B的交集的元素
data[(data['a']>=2) ^ (data['b']<=8)]#对称差集
索引重置
midage = midage.reset_index(drop =True)
#reset_index()函数的参数
#drop: 重新设置索引后是否将原索引作为新的一列并入DataFrame,默认为False
#inplace: 是否在原DataFrame上改动,默认为False
排序
# sort_values(by, axis=0, ascending=True, inplace=False, na_position='last')
df.sort_values(by=['col1', 'col2']) # by的值可以是列名,或者列名列表
df.sort_values(by='col1', ascending=False) # 下降排序,默认上升排序
df.sort_values(by='col1', ascending=False, na_position='first') #空值优先
#sort_index(axis=0, ascending=True, inplace=False, na_position='last')
df.sort_index() #默认按照行升序排列,同sort_values