pandas学习(二):常用方法笔记

1.如何利用现有数据构建dataframe格式数据

符合上图中的数据均可通过pd.DataFrame函数转换成dataframe数据格式

如raw_data是列表组成的列表:

raw_data=json.load(open('python_search','r+',encoding='utf-8'))
data=pd.DataFrame(raw_data,columns=['companyShortName','city',"companySize"])

详见Pandas DataFrame构造简析

2.如何在dataframe指定位置新添加一列或者多列数据

data=raw_data2.groupby('Year', as_index=False).agg(aggregations)
col_name = data.columns.tolist()
col_name.insert(0,'station_name')#在第一列位置添加station_name
col_name.insert(1,'province')#在第二列位置添加province
col_name.insert(2,'lat')#在第三列位置添加lat
col_name.insert(3,'lon')#在第四列位置添加lon
temp_list=[station_name for i in range(len(data))]
data["station_name"]=temp_list#赋值
temp_list=[province for i in range(len(data))]
data["province"]=temp_list#赋值
temp_list=[lat for i in range(len(data))]
data["lat"]=temp_list#赋值
temp_list=[lon for i in range(len(data))]
data["lon"]=temp_list#赋值
data=data.reindex(columns=col_name)#按规定的顺序对各列按列名排序

 详见https://www.cnblogs.com/rrttp/p/8108188.html

在这里我赋值的方式太蠢了构造列表赋值给列,后来又发现一种厉害的,就是下面的3

3.如何在dataframe新添加一列或者多列数据并根据条件赋值

temp_list=[station_name for i in range(len(data))]
data["station_name"]=temp_list#赋值

上面的蠢哭的方式完全可以用下面一句优雅的方式搞定:

data['station_name']=np.where(True,station_name,0)

或者:

data["station_name"]=data.apply(lambda x: station_name if True else 0, axis=1)

详见https://www.zhihu.com/question/277824046

4.如何在dataframe新添加一行或者多行数据

第一种可以通过data.loc[行索引]直接赋值,此方法对于每次添加单行还行,多行比较麻烦

第二种是通过先构建好新的dataframe,再通过pd.concat连接在一起,可单行可多行

# -*- coding: utf-8 -*-
__author__ = 'fff_zrx'
import pandas as pd

new_data=pd.DataFrame([[1,2,3,4,5,6,7]],columns=['Time_diff', 'E/N_last', 'E_last', 'AR_last', 'AR*_last', 'AR^+_last', 'AR2^+_last'])
print(new_data)
# 第一种方法
new_data.loc[1] = [7,6,5,4,3,2,1]
print(new_data)
# 第二种方法
add_data=pd.DataFrame([[7,6,5,4,3,2,1]])
#add_data=pd.DataFrame([7,6,5,4,3,2,1]).T#此行作用同上,都可
add_data.columns=new_data.columns
new_data = pd.concat([new_data,add_data],ignore_index=True)
print(new_data)

发布了62 篇原创文章 · 获赞 118 · 访问量 22万+

猜你喜欢

转载自blog.csdn.net/qq_38412868/article/details/101916320