Pandas
Series
- 一列带索引的数据
s = pd.Series(np.random.randn(5), name='Helloworld')
DataFrame
- 二维数据,多组Series的集合
df = pd.read_excel('GDP.xlsx')
- 重置索引
df = df.set_index('province')
- 更改列名
df.columns = '2010', '2019'
data = data.rename(columns = lambda x: x.lower()) #列名转化为小写
- 数据处理
data['2010'].sum()
data['2010'].mean()
data['2010'].max()
data['2010'].min()
data.describe() #查看描述性统计
data.info() #查看数据类型
df["价格"] = df["价格"].astype("float64") #数据类型转化
-
数据提取
-
iloc索引器按照位置进行基于整数的索引
df.iloc[0:3, 2:4] #选择1-3行,3-4列
-
loc索引器按照索引、布尔值或者条件选择数据
df.loc[['A','B'], ['C','D']] #选择多行多列 df.loc[df['first_name'] == 'DFL'] #按照布尔值选择
-
-
数据合并
- concat:沿着一条轴将多个DataFrame堆叠到一起
- append:将Series或字典数据添加到DataFrame
- merge:按照一个或多个键将不同DataFrame中的行连接起来
- join:将两个没用共同列名的数据进行快速合并,默认是保留被合并的数据索引
-
数据聚合
- 调用groupby函数,按照一列数据的不同组对DataFrame进行分组
-
apply函数
- 用于对当列数据遍历调用自定义函数
- 增加字段
df = pd.read_csv('./cook.csv') df['难度'] = df['用料数'].apply(lambda x:'简单'if x<5else('一般'if x<15 else'较难')) #增加难度字段
- 批量分割字符
df = df[df['楼层'].notnull()] df['所在楼层']=df['楼层'].apply(lambda x:x.split('/')[0]) df['所在楼层'] = df['所在楼层'].astype("int32")
- 正则匹配
def get_subway_distance(row): distance=re.search(r'\d+(?=米)',row) if distance==None: return-1 else: return distance.group() df['距离地铁距离']=df['地铁'].apply(get_subway_distance)
-
导出和保存DataFrame
data.to_csv('food.csv', index=False, encoding='utf-8') data.to_excel #将数据写入mysql的数据库,但需要先通过sqlalchemy.create_engine建立连接,且字符编码设置为utf8,否则有些latin字符不能处理 from sqlalchemy import create_engine connect = create_engine('mysql+pymysql://你的用户名:你的密码@localhost:端口号/数据库名?charset=utf8') pd.io.sql.to_sql(data,'stock_quotes', connect, schema='test', if_exists='append',index=False) #replace替换,append追加 #建议数据插入后,增加id字段并设置为自增主键,以后追加或更新数据时才不会报错