使用pandas包把数据结构写入Excel的时候,因为这个方法缺少了一个类似pd.to_csv()中的mode参数,以至于你每次用诸如pd.to_excel的形式取写入一个Excel的时候,系统都会帮你重新创建一个文件。也就是意味着前面的文件会被覆盖掉,你得到的只能是最后一个df写入的结果文件。
dataframe添加数据_dataframe添加一列数据
我们可以通过创建一个ExcelWriter对象,来完美解决上面的问题。
这个写入对象,会帮我们将DF写入到工作簿中
如果想把多个dataframe数据写在同一个工作簿的同一个表里面:利用strartcol和startrow
如果已经存在一个Excel文件,怎么填入数据。
你可以在R中直接call X,会看到已经改成你要的结果了,第一二列的名字都是“good”。
只是用View 函数查看X的时候,第二列会自动显示为“good.1"
通过cx_Oracle将 pd.dataframe 插入数据到oracle 数据库表 多值插入
笔者从外部获取dataframe类型的数据,尝试各种办法,要么各种报错,要么效率很低;
参照一海外大神文章,寥寥几句,完成任务
调用也简单,适用各种dataframe 的插入
【DataFrame/Dataset自定义新增加一列】
当我们需要将dataframe中的某一列数据装换为其它类型或者做一些其它的算法后,再新增加到datafram中时,最有效的方法是使用自定义的udf函数。本文的例子是将id列的数据转换为double类型,然后将该列数据增加到dataframe中
That's probably as efficient as any, but Pandas/numpy
structures are fundamentally not suited for efficiently growing. They
work best when they are created with a fixed size and stay that way. – BrenBarnDec 6 '12 at 20:43
append
is a wrapper for concat, so concat would be marginally more efficient,
but as @BrenBarn says Pandas is probably not appropriate for updating a
HDF5 file every second. If you absolutely need Pandas for some reason, could you collect a list of Series and update the file periodically instead? – Matti JohnDec 6 '12 at 20:54
Bren is right about numpy/pandas working best when preallocated. If memory is no constraint just preallocate a huge zeros array and append at the end of the program removing any excess zeros. Which I suppose is a bit of what Matti is saying. – arynaqDec 6 '12 at 21:16Intro to Data Structures
DataFrame is a 2-dimensional labeled data structure with columns of potentially different types.
所以一般说来dataframe就是a set of columns, each column is an array of values. In
pandas, the array is one way or another a (maybe variant of) numpy
ndarray. 而ndarray本身不存在一种in place
append的操作。。。因为它实际上是一段连续内存。。。任何需要改变ndarray长度的操作都涉及分配一段长度合适的新的内存,然后copy。。。
这是这类操作慢的原因。。。如果pandas dataframe没有用其他设计减少copy的话,我相信Bren说的"That's probably
as efficient as any"是很对的。。。
所以in general, 正如Bren说的。。。Pandas/numpy structures are fundamentally not suited for efficiently growing.
Matti 和 arynaq说的是两种常见的对付这个问题的方法。。。我想Matti实际的意思是把要加的rows收集成起来然后concatenate, 这样只copy一次。arynaq的方法就是预先分配内存比较好理解。。。
如果你真的需要incrementally build a dataframe的话,估计你需要实际测试一下两种方法。。。
我的建议是,如有可能,尽力避免incrementally build a dataframe, 比如用其他data structure 收集齐所有data然后转变成dataframe做分析。。。
顺便。。。这类问题上stackoverflow好得多。。
可以在pandas中创建一个空DataFrame的方法,类似于创建了一个空字典,之后向里面插入数据
例如:
empty =pandas.DataFrame({"name":"","age":"","sex":""})
想要向empty中插入一行数据。
(1)创建一个DataFrame。
new= pandas.DataFrame({"name":"","age":"","sex":""},index=["0"])。
(2)开始插值 ignore_index=True,可以帮助忽略index,自动递增。
empty.append(new,ignore_index=True)
(3)最重要的,赋值给empty.
empty= empty.append(new,ignore_index=True)
Python—padas(DataFrame)的常用操作
我们先说一下DataFrame是什么:
1、DataFrame是一种数据框结构,相当于是一个矩阵形式,单元格可以存放数值、字符串等,这和excel表很像;
2、DataFrame是有 行(index)和 列(columns)可以设置的;
有了示例,我们就能明白创建时需要传入数据,指定index(行索引名)和columns(列名);
在我们需要将单个元素的字典直接转为DataFrame时,程序会报错,需要适当做些转换,指定行索引或者列索引才行;
在增加列的时候我们用到了一个索引loc,后面我们再详细对loc进行说明,此处先知道可以这样使用。
文本字符串数据处理之前,一定要先转为字符(.str)再进行处理
loc 和 iloc如果容易记混,你就取巧记忆,index是索引
所以iloc则是依据位置索引进行取数,没有i的则是按照名称进行提取数据
原谅我很懒,比较喜欢这样框架式的笔记,所以文字就会比较少(#^.^#)!!!
在Pandas的DataFrame中添加一行或者一列,添加行有 df.loc[] 以及 df.append() 这两种方法,添加列有 df[] 和 df.insert() 两种方法, 下面对这几种方法的使用进行简单介绍。
采用 loc[] 方法多适用于对空的dataframe循环遍历添加行,这样索引可以从0开始直到数据结果,不会存在索引冲突的问题。
不过在使用insert的过程中发现 454: DeprecationWarning: `input_splitter` is deprecated since IPython 7.0, prefer `input_transformer_manager`. status, indent_spaces = self.shell.input_splitter.check_complete(code) 这个提示,猜测是有别的地方出问题了,还需要调试。
主要参考资料: