python数据拼接转换_Python 数据转换融合

1 数据合并

轴向连接 pd.concat()

沿纵向轴合并:axis=0

沿横向轴合并:axis=1

frames = [df1, df2]

pd.concat(frames) #上下连接

#pd.concat(frames, axis=1) 左右连接

pd.concat(frames, axis=1, keys=['df1', 'df2']) # 层次化索引

pd.concat(frames, axis=1, join='inner') # 0轴索引取交集

pd.concat(frames, axis=1, join_axes=[df1.index]) #只用原始索引

常用的参数

通过join_axes指定其他州的索引,不进行交并运算。

2 数据融合技术

2.1 使用pd.merge()

默认将重合列作为键,也可以通过参数on指定。

通过参数how指定融合方式(left,right,inner,outer)

融合指标变量indicator,默认为False,如果设为True,则增加_merge(取值为left_only,right_only,both)。可以设为一个字符串表示列名。

指定左键和右键:left_on,right_on

融合后相同名称列默认会产生后缀,可以使用suffixes来利用原列名及后缀产生新的列名。

索引-列合并

pd.merge(left, right, left_index= True, right_on='...', how='outer')

2.2 使用join融合

left.join(right, how='outer')

join默认融合方法how='left'

索引-列融合

#这两个方法是等价的

left.join(right, on=key_or_keys)

pd.merge(left, right, left_on=key_or_keys, right_index=True,how='left', sort=False)

2.3 combine_first 缺失值填补

-用df1的值来填补df2

df2.combine_first(df1)

3 排序和随机采样

df.sort_values('loan_amnt')

df.sort_index()

默认ascending=True,若改为False则为降序。

如果不是顺序或降序,想要重排:

先通过np.random.permutation产生重排后的数组

再用.iloc或take函数

sampler = np.random.permutation(10)

df.take(sampler)

df.take(np.random.permutation(3)) # 0,1,2的重排

df.sample(3) #任意三个

4 离散化及面元划分

cut()和qcut()函数

cut():等距离散化

bins = [0, 10000, 20000, 30000, 40000]

pd.cut(df['loan_amnt'], bins)

#添加标签

labels = ['A', 'B', 'C', 'D']

pd.cut(df['loan_amnt'], bins=bins, labels=labels)

qcut():等频离散化

cats = pd.qcut(df['loan_amnt’], 5)

cats.value_counts()

实际每个区间的数量并不一定是理想中的等量

5 数据转换

map()函数

df['loan_status'].map(str.title) # 产生了一个新的Series对象

df['loan_status'] = df['loan_status'].map(str.title) #替换原来的数据

# 利用字典

mapper = {‘Fully Paid’:0, 'Charged Off':1}

df['indicator'] = df['loan_status'].map(mapper)

替换值使用replace()

df.replace('10+ years', 'high')

# 多个,用列表

df.replace(['10+ years', '4 years', '< 1 year'], [10, 4, 1])

#也可以用字典

mapper = {'10+ years':10, '4 years’:4, '< 1 year’:1}

df.replace(mapper) # 等价于map:df['emp_length'].map(mapper)

# 重命名索引

df.columns

df.columns.map(str.upper)

df.columns = df.columns.map(str.upper)

哑变量编码get_dumies()

pd.get_dummies(df['home_ownership'])

dummies = pd.get_dummies(df['home_ownership'], prefix='home') #指定前缀

df[['loan_amnt','grade']].join(dummies) # 和原数据合并

pd.get_dummies(df) #DF对象亦可

pd.get_dummies(df, columns=['home_ownership'])

pd.get_dummies(df, columns=['home_ownership'], drop_first=True) # 去掉第一个编码特征

6 文本数据规整

s.str.lower()

df.columns.str.lower()

df.columns.str.lower().str.replace(' ', '_')

分割元素

在str上使用索引

s = pd.Series(['name1 age1 sex1', 'name2 age2 sex2', 'name3 age3 sex3'])

s.str.split(" ").str[0]

使用str.get()

s.str.split(" ").str.get(0)

s.str.split(" ", expand=True) # 展开成DF

结合正则表达式

s.str.contains(r'\d')

s.str.replace(r'\d.', 'XX')

s.str.findall(r'\d.').str.get(0)

s.str.extract(r'(\d.)', expand=False)

s.str.get_dummies(sep=',')

(根据《Python数据分析基础》整理)

要实现图像拼接融合并使亮度统一,可以按照以下步骤进行操作: 1. 加载要拼接的两张图像,并将它们转换为相同的色彩空间(例如RGB)。 ```python import cv2 # 加载图像 image1 = cv2.imread('image1.jpg') image2 = cv2.imread('image2.jpg') # 转换为RGB色彩空间 image1 = cv2.cvtColor(image1, cv2.COLOR_BGR2RGB) image2 = cv2.cvtColor(image2, cv2.COLOR_BGR2RGB) ``` 2. 计算两张图像的平均亮度。 ```python # 计算图像的平均亮度 average_brightness1 = image1.mean() average_brightness2 = image2.mean() ``` 3. 计算亮度差异,并对其中一张图像进行亮度调整。 ```python # 计算亮度差异 brightness_difference = average_brightness1 - average_brightness2 # 对其中一张图像进行亮度调整 adjusted_image = image1.copy() adjusted_image += brightness_difference ``` 4. 将两张图像进行拼接融合。 ```python # 创建拼接后的图像 merged_image = cv2.addWeighted(image1, 0.5, adjusted_image, 0.5, 0) ``` 在上述代码中,`cv2.addWeighted()` 函数用于将两张图像进行融合,其中第一个参数是第一张图像,第二个参数是第一张图像的权重,第三个参数是第二张图像,第四个参数是第二张图像的权重,最后一个参数是融合后的亮度偏移。 5. 显示结果。 ```python import matplotlib.pyplot as plt # 显示原始图像和拼接融合后的图像 fig, axes = plt.subplots(1, 3, figsize=(10, 4)) axes[0].imshow(image1) axes[0].set_title('Image 1') axes[0].axis('off') axes[1].imshow(image2) axes[1].set_title('Image 2') axes[1].axis('off') axes[2].imshow(merged_image) axes[2].set_title('Merged Image') axes[2].axis('off') plt.show() ``` 以上代码将加载两张图像并将其转换为RGB色彩空间。然后,计算两张图像的平均亮度,并计算亮度差异。接下来,对其中一张图像进行亮度调整,并使用 `cv2.addWeighted()` 函数将两张图像进行拼接融合。最后,显示原始图像和拼接融合后的图像。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值