1、创建一个空的dataframe ,并且里面直接含有索引和列名
result =pd.DataFrame(columns=('idx','degree','weight','diameter'),index= index_list)
这样避免在填充数值时,index 空缺而导致的问题。
- 1.2、也可以先设一个空的dataframe,然后后面可以append
df = pd.DataFrame({'a':[1,2,3],'b':[2,3,4]},index=range(3))
dff = pd.DataFrame([])
dff = dff.append(df.iloc[0,:])
a =pd.DataFrame([])
a = a.append(pd.Series([1,2],index=['a','b'],name=1))# 必须增加name ,作为index
a
这样避免在填充数值时,index 空缺而导致的问题。
2、如果在一个df 中,有一列每个元素是 一个tuple 或者是一个list,那么你想让一列变成多列。
df=pd.DataFrame({'a':[(1,2),(2,3)]})
df[['a1','a2']] =df.a.apply(pd.Series)
这里很简单 ,就是对series 的apply 用法,也不涉及axis ,可以参考原理
官网其实是对针对series 的apply的 用法,里边也不涉及axis 参数,就是针对将每行的那个元素输入你将要apply的函数,所以pd.series(tuple)之后就会变成多个元素,正好被df[['a1','a2']]中承接。
3 groupby 和lambda 结合
切记,当groupby 中传入一个函数时,里面传入的x ,要直接理解为对象index。什么意思呢?
例如,存在一个df
date=pd.date_range('2020-01-01',periods=3)
df=pd.DataFrame({'a':[1,4,7],'b':[2,5,8],'c':[3,6,9]},index=date)
index | a | b | c |
---|---|---|---|
2020-01-01 | 1 | 2 | 3 |
2020-01-01 | 4 | 5 | 6 |
2020-01-03 | 7 | 8 | 9 |
by_year = data_merge.groupby(lambda x:x.year) ## 这里直接用x.year
result = by_year.apply(liner_regression)
by_year = data_merge.groupby(lambda x:x.year) 在这个代码中后面直接用x.year ,因为在传入函数中就已经默认是 x 为index.
3 dataframe 找到最大值和位置
df.stack().max()
df.stack().idxmax()
4 如果一个esv 中有多个sheet ,可以先得到sheet name
data= pd.read_excel('/Users/wangyaodong/Desktop/aencent/原始数据.xlsx',None)
names = data.keys()
df= pd.read_excel('/Users/wangyaodong/Desktop/aencent/原始数据.xlsx',names[0])
5 双列表变成 dataframe
每个列表会变成行
pd.DataFrame([[1,2,3,[2,3,4]])
index | a | b | c |
---|---|---|---|
0 | 1 | 2 | 3 |
1 | 2 | 3 | 4 |
5 reset_index 和reindex
reset_index ,可以将原来的index 抽出来变成一列,然后新的index 就是range(len(data)
result2= result.reset_index()
reindex 是指重新给index 或者column 一个 新的排列,可以 增加新的,新的可以填充空值。
result3 = result.reindex(columns=['A','C'])
也可以作用在index 上面
6 class 类
在一个文件中写一个类(object) 然后里面直接定义各种变量,也没有self ,—init 函数 ,
在其他地方import 之后可以直接引用这些变量
举个例子 ,
在文件a.py 中
class Mycalss(object):
name ='wangyd'
在b.py文件中,就可以from a import Myclass
然后就可以name = Myclass.name
6 to_csv append
df.to_csv('the_data_file.csv', mode='a', header=False)
7 dict 注意事项
现在不能写dict.values()[0:10]
而必须 list(dict.values())[0:10]