python pandas dataframe 常用数据处理操作

新建dataframe对象

data = {}
df = pd.DataFrame(data = data)

表格导入dataframe对象

df = pd.read_exel('路径')

json转df

df = pd.json_normalize(jsontext)

df设置index索引

df = df.set_index(['A']

重置索引

df = df.reset_index()

去重索引列表,for遍历用。

list(df.index.unique())

新增列:

a = pd.Series([])

单列数据批量处理:用lambda 搭配apply处理

df['srcip'] = df['srcip'].apply(lambda x: x[0])
df['srcip'] = df['srcip'].apply(lambda x: x.replace("]",""))

只要其中几列,可改顺序,名字得对上

df = df[['a','b','c']]

判断是否为空:

df.empty

重命名列

df.columns = [['a','b','c']]

以某几列的值排序,

df.sort_values(by=['a','b'], inplace=True, ascending=[False, False])

DataFrame.sort_values(by, ascending=True, inplace=False)
参数说明:
by:字符串或者List<字符串>,单列排序或者多列排序
ascending:bool或者List,升序还是降序,如果是list对应by的多列
inplace:是否修改原始DataFrame

只要前几行:

df = df.head(10)

按条件选行

index = df[(df['a'] == abc)]

删除不需要的行

index = df[(df['A'] == 'a') | (df['b'].str.contains('其他'))]
df = df.drop(index.index)

新建一行求和

df.loc['sum'] = df[['a', 'b', 'c', 'd']].sum()

改变某列的数据类型:

方法1:

df['a'].astype('数据类型')
num=num.astype('str')

str(df[‘a’]) 会将整列的内容转换为单个字符串
方法2:

alist = [str(i) for i in alist]

看每列的数据类型:

df.dtype()

其中object 表示这列内容乱七八糟,可以用str的处理方法

某列转换为列表

alist = df['a'].tolist()

列表转化成字符串

str = ','.join(list)

excel按字符分列 label

df['one']=df['label'].str.split('_').str[0]
df['two']=df['label'].str.split('_').str[1]
df['three']=df['label'].str.split('_').str[2]

新建一列b,a列中包括‘com’内容的(第一个com),赋值为com(第二个com)

df.loc[df['a'].str.contains(com, na= '未知'),'b']=com

df.loc[:,'name'] #前面的冒号相当于一个切片,即选取所有行,如果直接df.loc['name']会报错
#标签列表,注意要使用 [[]] 的形式
df.loc[[0,2],'name']
0    张三
2    王二
#切片操作,两端都可以取到
df.loc[0:2,'name'] #注意,这里的0:2是标签,不是位置序列!!!
0    张三
1    李四
2    王二

删除company为空的行

df = df.dropna(axis=0, subset=["company"]) #删除指定列中有缺失值的那一行数据

把单个单元格里的二维df展开

df_by_net = df[['company','a']]
##1、先平均到各行
newvalues=np.dstack((np.repeat(df.b.values,list(map(len,df.a.values))),np.concatenate(df.a.values)))
df = pd.DataFrame(data=newvalues[0],columns=df.columns)

##2、再拆分为不同的列,把a列拆
result = df.a.apply(pd.Series)
result["b"] = df.b
df_by_net = result[['c','b']]

不同df保存到不同sheet(正常保存会被覆盖)

writer = pd.ExcelWriter(path)
df_init.to_excel(writer,sheet_name='c')
df1.to_excel(writer,sheet_name='a')
df2.to_excel(writer,sheet_name='b')
writer.save() #这一步一定要写,后面的sheet不会覆盖前面的

显示所有列(写在前面或者main里)

pd.set_option('display.max_columns', None)

显示所有行(写在前面或者main里)

pd.set_option('display.max_rows', None)

版权声明:本文为sinat_35058227原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
THE END
< <上一篇
下一篇>>