python文件可以包括任何数据内容_python 文件数据合并(数据行不对应)?
这里我们讨论如何利用concat方法进行简单的数据拼接。
import pandas as pd
ser1 = pd.Series(['A','B','C'], index=[1,2,3])
ser2 = pd.Series(['D','E','F'], index=[4,5,6])
ser = pd.concat([ser1,ser2])
print(ser1)
print(ser2)
print(ser)
1 A
2 B
3 C
dtype: object
4 D
5 E
6 F
dtype: object
1 A
2 B
3 C
4 D
5 E
6 F
dtype: object
在这个例子中,我们简单的对Series进行了拼接,我们看到默认的情况是逐行进行合并操作,对DataFrame对象进行简单拼接也是一样。
import pandas as pd
df1 = pd.DataFrame({'A':{'1':'A1','2':'A2'},'B':{'1':'B1','2':'B2'}})
df2 = pd.DataFrame({'A':{'3':'A3','4':'A4'},'B':{'3':'B3','4':'B4'}})
print(df1)
print(df2)
print(pd.concat([df1,df2]))
A B
1 A1 B1
2 A2 B2
A B
3 A3 B3
4 A4 B4
A B
1 A1 B1
2 A2 B2
3 A3 B3
4 A4 B4
通过这种方法,我们也是以逐行的方式对两个DataFrame进行了合并。
很自然的,相对于逐行进行合并,也可以按逐列的方式进行合并,类比之前讲过的,加上一个axis参数即可:
import pandas as pd
import numpy as np
df1 = pd.DataFrame({'A':{'1':'A1','2':'A2'},'B':{'1':'B1','2':'B2'}})
df2 = pd.DataFrame({'C':{'1':'C1','2':'C4'},'D':{'1':'D1','2':'D2'}})
print(df1)
print(df2)
print(pd.concat([df1,df2], axis=1))
A B
1 A1 B1
2 A2 B2
C D
1 C1 D1
2 C4 D2
A B C D
1 A1 B1 C1 D1
2 A2 B2 C4 D2
上面的例子举得比较特殊,刻意设置了两个DataFrame数据的索引是不同的,如果恰好他们的索引相同,会不会出问题。
这个问题提的不错,Pandas中concat方法的一个很大的特点就是保留索引,合并后的结果里各行的索引与合并前的索引保持一致。
import pandas as pd
df1 = pd.DataFrame({'A':{'1':'A1','2':'A2'},'B':{'1':'B1','2':'B2'}})
df2 = pd.DataFrame({'A':{'1':'A3','2':'A4'},'B':{'1':'B3','2':'B4'}})
print(pd.concat([df1,df2]))
A B
1 A1 B1
2 A2 B2
1 A3 B3
2 A4 B4
可以看到,结果并没有报错,而且确实是保留了合并前的索引。但是这并不是我们想看到的,因为这样一来,A1、A3两项的索引就是完全一样了。
那就眼睁睁的看着这种情况发生吗?
当然不是,解决的方法有两种:
第一种就是忽略这种索引,如果索引是这种没有实际意义的流水ID,那么我们可以让他们顺次的往下排列,从而避免重复,设置一个ignore_index即可实现。
import pandas as pd
df1 = pd.DataFrame({'A':{'1':'A1','2':'A2'},'B':{'1':'B1','2':'B2'}})
df2 = pd.DataFrame({'A':{'1':'A3','2':'A4'},'B':{'1':'B3','2':'B4'}})
print(df1)
print(df2)
print(pd.concat([df1,df2], ignore_index=True))
A B
1 A1 B1
2 A2 B2
A B
1 A3 B3
2 A4 B4
A B
0 A1 B1
1 A2 B2
2 A3 B3
3 A4 B4
那如果我觉得原来的索引代表了实际意义,不能忽略呢?
别急,第二种方法就是利用多级索引的方式来保留原索引。
import pandas as pd
df1 = pd.DataFrame({'A':{'1':'A1','2':'A2'},'B':{'1':'B1','2':'B2'}})
df2 = pd.DataFrame({'A':{'1':'A3','2':'A4'},'B':{'1':'B3','2':'B4'}})
print(df1)
print(df2)
print(pd.concat([df1,df2], keys=['x','y']))
A B
1 A1 B1
2 A2 B2
A B
1 A3 B3
2 A4 B4
A B
x 1 A1 B1
2 A2 B2
y 1 A3 B3
2 A4 B4
还漏了一种情况,就是如果列名不完全一致应该如何处理?
我们继续看看在合并的过程中,列会出现什么现象。
import pandas as pd
df1 = pd.DataFrame({'A':{'1':'A1','2':'A2'},'B':{'1':'B1','2':'B2'},'C':{'1':'C1','2':'C2'}})
df2 = pd.DataFrame({'B':{'3':'B3','4':'B4'},'C':{'3':'C3','4':'C4'},'D':{'3':'D3','4':'D4'}})
print(df1)
print(df2)
print(pd.concat([df1,df2]))
A B C
1 A1 B1 C1
2 A2 B2 C2
B C D
3 B3 C3 D3
4 B4 C4 D4
A B C D
1 A1 B1 C1 NaN
2 A2 B2 C2 NaN
3 NaN B3 C3 D3
4 NaN B4 C4 D4
从结果中我们可以看出,我们这种默认的合并方式是对所有的输入列取并集,如果在某个位置上值缺失,则用NaN值来代替。
如果我们想换一种方式,对输入列取交集,这样就不会出现NaN值了。
import pandas as pd
df1 = pd.DataFrame({'A':{'1':'A1','2':'A2'},'B':{'1':'B1','2':'B2'},'C':{'1':'C1','2':'C2'}})
df2 = pd.DataFrame({'B':{'3':'B3','4':'B4'},'C':{'3':'C3','4':'C4'},'D':{'3':'D3','4':'D4'}})
print(df1)
print(df2)
print(pd.concat([df1,df2], join='inner'))
A B C
1 A1 B1 C1
2 A2 B2 C2
B C D
3 B3 C3 D3
4 B4 C4 D4
B C
1 B1 C1
2 B2 C2
3 B3 C3
4 B4 C4
当然,我们还可以指定任何一个合并项的列来作为最后结果的使用列:
import pandas as pd
df1 = pd.DataFrame({'A':{'1':'A1','2':'A2'},'B':{'1':'B1','2':'B2'},'C':{'1':'C1','2':'C2'}})
df2 = pd.DataFrame({'B':{'3':'B3','4':'B4'},'C':{'3':'C3','4':'C4'},'D':{'3':'D3','4':'D4'}})
print(df1)
print(df2)
print(pd.concat([df1, df2], join_axes=[df1.columns]))
A B C
1 A1 B1 C1
2 A2 B2 C2
B C D
3 B3 C3 D3
4 B4 C4 D4
A B C
1 A1 B1 C1
2 A2 B2 C2
3 NaN B3 C3
4 NaN B4 C4
关于数据科学更系统、更深入的探讨可进入我们的专栏《Python数据科学之路》:酱油哥:来吧,一起踏上Python数据科学之路zhuanlan.zhihu.com
本专栏模仿美剧剧集编排分为五季,第一季:Python编程语言核心基础、第二季:Python数据分析基本工具、第三季:Python语言描述的数学基础、第四季:机器学习典型算法专题、第五季:实战热点深度应用。
python文件可以包括任何数据内容_python 文件数据合并(数据行不对应)?相关推荐
- 下列不是python对文件的写操作方法的是_Python—文件读写操作
初识文件操作 使用open()函数打开一个文件,获取到文件句柄,然后通过文件句柄就可以进行各种各样的操作了,根据打开文件的方式不同能够执行的操作也会有相应的差异. 打开文件的方式: r, w, a, ...
- python爬取网站数据步骤_python怎么爬取数据
在学习python的过程中,学会获取网站的内容是我们必须要掌握的知识和技能,今天就分享一下爬虫的基本流程,只有了解了过程,我们再慢慢一步步的去掌握它所包含的知识 Python网络爬虫大概需要以下几个步 ...
- python提取word表格里的内容_python读取word表格 python中如何将word表格内的内容进行替换...
python如何获取word文件中某个关键字之后的表格一片春愁待酒浇.江上舟摇,楼上帘招.秋娘度与泰娘娇.风又飘飘,雨又萧萧.何日归家洗客袍?银字笙调,心字香烧.流光容易把人抛.红了樱桃,绿了芭蕉. ...
- python爬取网页数据流程_Python爬虫爬取数据的步骤
爬虫: 网络爬虫是捜索引擎抓取系统(Baidu.Google等)的重要组成部分.主要目的是将互联网上的网页下载到本地,形成一个互联网内容的镜像备份. 步骤: 第一步:获取网页链接 1.观察需要爬取的多 ...
- python爬取数据步骤_Python爬虫爬取数据的步骤
爬虫: 网络爬虫是捜索引擎抓取系统(Baidu.Google等)的重要组成部分.主要目的是将互联网上的网页下载到本地,形成一个互联网内容的镜像备份. 步骤: 第一步:获取网页链接 1.观察需要爬取的多 ...
- python中函数包括标准库函数吗_Python标准库:内置函数divmod(a, b)
本函数是实现a除以b,然后返回商与余数的元组. 如果两个参数a,b都是整数,那么会采用整数除法,结果相当于(a//b, a % b).如果a或b是浮点数,相当于(math.floor(a/b), a% ...
- 怎样用python把数据分开_python使用pandas实现数据分割实例代码
本文研究的主要是Python编程通过pandas将数据分割成时间跨度相等的数据块的相关内容,具体如下. 先上数据,有如下dataframe格式的数据,列名分别为date.ip,我需要统计每5s内出现的 ...
- python 读写csv文件(创建、追加、覆盖)_python文件操作
大神一看题目就知道用python中的string.split('\'),记得之前处理大量的文件的时候,有时候有几十万的文本文件,经常会读取获取名称,并且保存为名字一样的另外一种格式的文件 其实pyth ...
- python写入excel怎么跨列居中_python文件读写(三)-Excel表格三剑客xlwt,xlrd,xlutils...
1.写xlwt import xlwt f = xlwt.Workbook() sheet1 = f.add_sheet(u'sheet1', cell_overwrite_ok=True) styl ...
最新文章
- LeetCode实战:合并两个有序数组
- 算法工程师和算法框架开发,谁会代表未来?
- 【阿里云课程】注意力机制原理,应用与设计
- datetime timestamp的区别
- Mysql date time formate
- HDU 3400 Line belt【三分法】
- C++ vector.insert的用法
- mysql在linux 下安装
- watch gt3 鸿蒙,华为Watch3有什么功能-华为Watch3功能介绍
- springboot开发(yml配置和注解解析)
- php百度鹰眼,Android 百度鹰眼里程计算简单实列
- C# 在类文件自动添加文件注释的方法
- python 数据分析--2016美国竞选辩论可视化
- 2019蓝桥杯A组:平方和(枚举,筛选)
- android 多线程 handler使用方法
- 新手请教个问题,有关cocos2d-x
- 如何去掉空格 oracle,oracle数据库中如何去除空格
- 黑马Java基础笔记大纲
- 计算机数字信号和模拟信号,模拟信号和数字信号有什么区别
- 比UUID更快更安全NanoID到底是怎么实现的?(荣耀典藏版)
热门文章
- 上大学了,但学校一般,该怎么办?
- 搞懂C语言指针,看这篇就够了!
- 如何保护电路不被烧毁?
- 「第一篇」大学生电子设计竞赛,等你来提问。
- 「第一弹」电子设计大赛应该准备什么?
- HDLBits答案(16)_Verilog有限状态机(3)
- mysql 雇员表脚本,mysql压力测试脚本实例_MySQL
- oracle 叠加代码写法,利用st_geometry进行图形叠加分析
- cap流程图_化工工艺流程图制图图例汇编.pdf
- el表达式遍历list中的list_EL表达式获取map和list集合中的值 | 学步园