task1:Pandas基础
导入数据的方式:
import pandas as pd
df = pd.read_csv('trian.csv', chunksize=, header=, index_col=)
chunksize设置分块的大小,也就是每次读取的大小;
header用来指定第几行是首行。header参数可以是一个list例如:[0,1,3],这个list表示将文件中的这些行作为列标题(意味着每一列有多个标题),介于中间的行将被忽略掉(例如本例中的2;本例中的数据1,2,4行将被作为多级标题出现,第3行数据将被丢弃,dataframe的数据从第5行开始。)。
index_col : int or sequence or False, default None
用作行索引的列编号或者列名,如果给定一个序列则有多个行索引。
如果文件不规则,行尾有分隔符,则可以设定index_col=False 来使得pandas不使用第一列作为行索引。
查看数据的基本情况
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)
创建一个Series和DataFrame对象
sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000}
example_1 = pd.Series(sdata)
example_1
out:
Ohio 35000
Texas 71000
Oregon 16000
Utah 5000
dtype: int64
data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada', 'Nevada'],
'year': [2000, 2001, 2002, 2001, 2002, 2003],'pop': [1.5, 1.7, 3.6, 2.4, 2.9, 3.2]}
example_2 = pd.DataFrame(data)
example_2
out:
state year pop
0 Ohio 2000 1.5
1 Ohio 2001 1.7
2 Ohio 2002 3.6
3 Nevada 2001 2.4
4 Nevada 2002 2.9
5 Nevada 2003 3.2
查看某一列的内容
df['列名']
df.列名
删除某一列
del df['列名']
df.drop(labels='列名', axis=1) #删除单个列
df.drop(labels=['列名1', '列名2'], axis=1) #删除多个列
df.drop(columns=['列名1', '列名2'])
df.drop([0, 1]) # 删除第一、二行。
数据的选择
按照行选择:
df.loc[[0, 1]] # 表示选择前两行,返回的结果是DataFrame类型的数据
df.loc[[100], ['Age']] # 返回index=100行的Age列的DataFrame类型的数据
df[:0] # 选择第一行,返回的结果是Series类型的数据
loc和iloc的区别:
loc是标签索引,说白了就是行上的标签,如果标签正好是整数的话,那么就类似于数组那样取数据了(最好不要这样用,应该用iloc来进行整数索引)。
iloc是按照数字索引,类似于c语言中对数组的索引。
索引set_index()和reset_index()函数的区别。
如何在pandas中使用set_index( )与reset_index( )设置索引 - 知乎 (zhihu.com)
reset_index重置索引,将复合索引恢复,或是将索引变得连续。
排序:
df.sort_values(by='列名', ascending=True) # 升序
df.sort_index() #让行索引升序
df.sort_index(axis=1) #让列索引升序
df.sort_values(by=['a', 'c'], ascending=True) # 多关键字排序,都按照升序的方式
df.sort_values(by=['a', 'c'], ascending=[True, False]) # 第一个关键字升序,第二个降序
DataFrame相加
对应行标签和列标签的可以相加,如果不对应,值就是NaN,注意相加不是集合的并。
Jupyter Notebook查缺补漏
在jupyter中某个对象的后面输入问号?,可以获得该对象的一些信息。
In [8]: b = [1, 2, 3]
In [9]: b?
Type: list
String Form:[1, 2, 3]
Length: 3
Docstring:
list() -> new empty list
list(iterable) -> new list initialized from iterable's items
In [10]: print?
Docstring:
print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
Prints the values to a stream, or to sys.stdout by default.
Optional keyword arguments:
file: a file-like object (stream); defaults to the current sys.stdout.
sep: string inserted between values, default a space.
end: string appended after the last value, default a newline.
flush: whether to forcibly flush the stream.
Type: builtin_function_or_method
使用%run+python文件名,运行这个python文件
In [14]: %run ipython_script_test.py
运行后文件中的变量、函数名都可以在IPython中使用。
使用%load+文件名,将文件中的内容导入到jupyter单元中(只要是文本文件就可以):
%load test.py
执行该单元格后,会将test.py中的所有内容都导入到上面的单元格中,并注释掉原来的load行代码:
# %load test.py
import sys
def printHello(args):
print("hello world")
print(f"len(args): {len(args)}")
print(f"args: {args}")
a = 1
printHello(sys.argv[1:])
c = 2
%matplotlib inline 这个命令是设置IPython和matplotlib的一些交互,这样画的图就可以出现在jupyter中了。
资料
datawhalechina/hands-on-data-analysis: 动手学数据分析以项目为主线,知识点孕育其中,通过边学、边做、边引导来得到更好的学习效果 (github.com)
《利用python进行数据分析》这本书
Wes McKinney,利用python进行数据分析,作者个人网站,开放了第三版。