1月 042017
 

python怎么求交集呢。如果是DataFrame某字段求交集,可以用isin,也可以用merge。isin只会保留一边的交集数据,merge则两边都会保留。当然merge不仅仅是取交集。

如果是对Series求交集intersect1d。这种方式的数据筛选权当做取交集吧。

# coding:UTF-8

import pandas as pd
import numpy as np

df1 = pd.DataFrame({
        "id":range(1,5),
        "age":(18, 24, 32, 20),
        "address":('shanghai', "bejing", "shanghai", "guangzhou")
});

df2 = pd.DataFrame({
        "id":range(10,14),
        "age":(20, 16, 25, 24),
        "address":('shanghai', "bejing", "shanghai", "guangzhou")
});


df3 = pd.merge(df1,df2, how='inner',on="age")

df4 = df1[df1["age"].isin(df2["age"])]

#下边是处理Series
s1 = df1["age"]

s2 = df2["age"]

s3 = np.intersect1d(s1, s2)

1月 042017
 

python插入数据到mysql的工具很多。每个工具写法不一样效率也不一样。就拿sqlalchemy,MySQLdb,sqlite3来说。sqlalchemy分ORM方式插入数据和非ORM方式插入。非ORM和ORM都还有细微的方式。可以参考:
http://docs.sqlalchemy.org/en/latest/faq/performance.html#i-m-inserting-400-000-rows-with-the-orm-and-it-s-really-slow

自己做了下尝试。插入3.8万条数据到mysql。用MySQLdb的一种写法需要1.8s左右,用sqlite3用时约2s左右,sqlalchemy的非ORM方式单纯insert需要2.8s左右,带去重则需要8s左右。说到去重,用MySQLdb的去重效率最高。各个框架工具,最开始暴露出来的称ORM,具体内部实现是怎样,需要考量。单纯的sql语句。insert into XXX values (xxx),(xxx),(xxx)。比insert into XXX values (xxx), insert into XXX values (xxx) …… 这样效率高很多。

按效率高低,贴出部分代码。
Continue reading »

12月 192016
 

避免往数据库中插入重复数据,可以使用INSERT IGNORE 或 REPLACE INTO。
INSERT IGNORE 会忽略数据库中已经存在的数据,如果数据库没有数据,就插入新的数据,如果有数据的话就跳过这条数据。这样就可以保留数据库中已经存在数据,达到在间隙中插入数据的目的。
REPLACE INTO 如果存在primary 或 unique相同的记录,则先删除掉。再插入新记录。

在SQLAlchemy中,用ORM方式,方便大量插入数据。操作简单。如果也想避免往数据库中插入数据,其实操作也一样的。

engine.execute(User.__table__.insert().prefix_with(‘IGNORE’), {{‘id’: 1, ‘name’: ‘1’},{‘id’: 1, ‘name’: ‘1’},…,{‘id’: 2, ‘name’: ‘2’}})

参考:https://www.keakon.net/2012/12/03/SQLAlchemy%E4%BD%BF%E7%94%A8%E7%BB%8F%E9%AA%8C

参考:http://itindex.net/detail/40939-sqlalchemy-%E7%BB%8F%E9%AA%8C

参考:http://www.cnblogs.com/koka24/p/5327280.html

参考:http://www.jianshu.com/p/e6bba189fcbd

参考:http://www.jianshu.com/p/28d3f5079f50

MYSQL批量插入数据效率问题:http://blog.csdn.net/frinder/article/details/38830723

SQLAlchemy批量插入数据效率问题:http://docs.sqlalchemy.org/en/latest/faq/performance.html#i-m-inserting-400-000-rows-with-the-orm-and-it-s-really-slow

11月 042016
 

在pandans中,时间的计算以及转换,有它自己独有一套API.对时间的数据类型也很讲究。比如打印出来都一样,可能它是字符串类型,也可能是pandas.tslib.Timestamp类型。字符串中,你没法去比较时间的大小,也没法做时间的计算。两个时间差多少小时,多少分这些。往往,一般都是需要先转化。将字符串转换成Timestamp类型。再做计算或比较。
Continue reading »

11月 042016
 

我们在做merge的时候,如果两个DataFrame中存在相同的列名,merge会自动给相同的列名加上后缀。然后,你对需要的数据进行切割。如果所需要的数据中列名还带着个后缀,是很不舒服的。这个时候,你会想重命名列名。这个是一种场景。在其他场景,你也许也想重命名列名的。总之,就是想重命名列名。

通过DataFrame的rename方法,可以实现列名的改变。也可以使用columns属性来操作(直接赋值的方式)。其实,当对个别列重命名,当然是rename最好了。
Continue reading »

10月 272016
 

对DataFrame的各种处理太多太多。这里,只记录一点点,以便熟悉和记忆。利用where特性,去除特殊的行或赋值。利用lambda表达式和函数,更详细的处理行的情况。这些不仅仅对DataFrame操作,对其他对象该有该种行为的一样有效果。下边列出代码和输出。
Continue reading »

网站地图