学习笔记-Pandas Numpy

Numpy

nanmean方法

np.nan == np.nan

会返回False

pandas的空值

有两个df, df1
merge left想要加入df1的唯一的一个不属于df的字段, 之后, df1部分的空值好像是float NaN
哦上面这个应该是array_join之后返回的是str, 还不是下面说的这种None然后拼接
但是sql查询出来的空, 转成pandas里面好像是NoneType

df1 = read_sql("""
select * 
from (
    select '2' c
) a""")

df2 = read_sql("""
select * 
from (
    select '1' c, '2' d
) a""")

result = pd.merge(df1, df2, on=['c'], how='left')
print(result)
# 输出
#    c    d
# 0  2  NaN
df1 = read_sql("""
select * 
from (
    select 1 c
) a
left join (
    select 2 cc
) b
on a.c = b.cc""")

print(df1)
# 输出
#    c    cc
# 0  1  None

pandas除以0的一个错误

dif = df.apply(lambda x: (x['sale_price'] - x['回收公允价']) / x['回收公允价'] if x['是否首日定价'] == '否' and x['回收公允价'] != 0 else np.nan, axis=1).map(lambda x: '{:.3f}'.format(x))
上面会报错, 但是下面不会报错
data = {'A': [1, 2, 3, 4],
        'B': [1, 2, 0, 0]}
df = pd.DataFrame(data)
df['C'] = df['A'] / df['B']
df['C'] = df.apply(lambda x: x['A'] / x['B'], axis=1)

trasform的一个bug

用tolist函数时候,只会返回一个值
https://stackoverflow.com/questions/62458837/groupby-transform-to-list-in-pandas-does-not-work
两个修改方法

df['Price_List'] = df.groupby('Category')['Price'].transform(lambda x : [x.tolist()]*len(x))
df['Price_List'] = df['Category'].map(df.groupby('Category')['Price'].agg(list))

注意
DataFrame' object has no attribute 'map'
所以用多列聚合的时候, 第二个方法好像没用

panda的merge

how='left'的时候, 右边不存在的值的数据格式和左边一样, 如果左边是float, 右边不存在的时候就是NaN, 但是其他匹配到的地方的数据格式就是匹配到的数据格式, 后续的操作要注意判断一下

df.groupby + agg

这个函数返回的df打印出来全部列都有, 但是columns里面只有聚合的列

reset_index() 用这个 重置一下

两个一行的df, concat(axis=1)变成了2行 原因是index不一样

可能是index类型不一样, 一个int, 一个rangeindex
https://blog.csdn.net/ninenins/article/details/120305648

对于上面的,即使使用了ignore_index 横向拼接还是会有问题, 因为ignore是拼完之后再忽略
https://segmentfault.com/a/1190000015370825

import pandas as pd
df1 = pd.DataFrame({'A': [1]}, index=['row1'])
df2 = pd.DataFrame({'B': [2]}, index=['row2'])
# 使用concat()函数将DataFrame合并为一行并忽略索引
merged_df = pd.concat([df1, df2], ignore_index=True, axis=1)
print(merged_df)
        0    1
row1  1.0  NaN
row2  NaN  2.0
posted @ 2023-06-28 16:01  种树人  阅读(6)  评论(0编辑  收藏  举报