小编Art*_*r G的帖子

向MultiIndex添加级别,删除而不会丢失

假设我有一个DataFrame带有MultiIndex 的df,它的级别为L.

有没有办法从索引中删除L并再次添加?

df = df.index.drop('L')完全从DataFrame中删除L(不像df= df.reset_index()有一个drop参数).我当然可以df = df.reset_index().set_index(everything_but_L, inplace=True).

现在,让我们假设索引包含除L之外的所有内容,并且我想添加L. df.index.insert(0, df.L)不起作用.我当然可以打电话,df= df.reset_index().set_index(everything_including_L, inplace=True)但感觉不对.

我为什么需要这个?由于索引不必是唯一的,因此可能会发生我想要添加新列以使索引变得唯一的情况.在分割数据之后,一个级别的索引不再包含任何信息(例如我的索引是A,B和我在A = x上操作df但是我不想丢失A会发生这种情况下,删除可能很有用) index.droplevel('A')).

python pandas

10
推荐指数
1
解决办法
8396
查看次数

在R中将UTF-8 BOM导出到.csv

我正在从MySQL数据库通过RJDBC读取文件,它正确显示R中的所有字母(例如,נווהשאנן).但是,即使使用write.csv和fileEncoding ="UTF-8"导出它,输出看起来像 <U+0436>.<U+043A>. <U+041B><U+043E><U+0437><U+0435><U+043D><U+0435><U+0446>(在这种情况下,这不是上面的字符串而是保加利亚字符串),用于保加利亚语,希伯来语,中文等等.其他特殊字符,如ã,ç等工作正常.

我怀疑这是因为UTF-8 BOM,但我没有在网上找到解决方案

我的操作系统是德语Windows7.

编辑:我试过了

con<-file("file.csv",encoding="UTF-8")
write.csv(x,con,row.names=FALSE)
Run Code Online (Sandbox Code Playgroud)

和(afaik)等价物write.csv(x, file="file.csv",fileEncoding="UTF-8",row.names=FALSE).

byte-order-mark r utf-8 export-to-csv

9
推荐指数
2
解决办法
5941
查看次数

使用R包RJDBC重命名MySQL select语句中的列

我正在使用RJDBC软件包连接到Windows 7机器上的R中的MySQL(Maria DB)数据库,我正在尝试像

select a as b
from table
Run Code Online (Sandbox Code Playgroud)

但该列将始终在数据框中继续命名为"a".

这通常适用于RODBC和RMySQL,但不适用于RJDBC.不幸的是,我必须使用RJDBC,因为这是唯一一个对中文,希伯来语等字母编码没有问题的软件包(集合名称等似乎不适用于RODBC和RMySQL).

有人遇到过这个问题吗?

mysql r jdbc

9
推荐指数
1
解决办法
2734
查看次数

GroupBy在Python Pandas中起作用,如SUM(col_1*col_2),加权平均等

是否可以直接计算两列的乘积(或例如总和)而不使用

grouped.apply(lambda x: (x.a*x.b).sum()
Run Code Online (Sandbox Code Playgroud)

它的使用速度更快(在我的机器上不到一半的时间)

df['helper'] = df.a*df.b
grouped= df.groupby(something)
grouped['helper'].sum()
df.drop('helper', axis=1)
Run Code Online (Sandbox Code Playgroud)

但我真的不喜欢这样做.例如,计算每组的加权平均值是有用的.lambda方法就是这样

grouped.apply(lambda x: (x.a*x.b).sum()/(df.b).sum())
Run Code Online (Sandbox Code Playgroud)

并且再次比将助手除以b.sum()慢得多.

python pandas

9
推荐指数
1
解决办法
4844
查看次数

使用psycopg2将pandas DataFrame快速插入Postgres DB

我正在尝试以最有效的方式(使用Python 2.7)将pandas DataFrame插入Postgresql DB(9.1)中。
使用“ cursor.execute_many”的速度确实很慢,因此“ DataFrame.to_csv(buffer,...)”和“ copy_from”一起使用也很慢。
我已经发现了很多!我适应了与熊猫一起使用的Web上更快的解决方案(http://eatthedots.blogspot.de/2008/08/faking-read-support-for-psycopgs.html)。
我的代码可以在下面找到。
我的问题是,这个相关问题的方法(使用“使用二进制从stdin复制”)是否可以轻松地转移到DataFrames上使用,并且这样做是否会更快。
将二进制COPY表FROM与psycopg2一起使用
不幸的是,我的Python技能不足以理解这种方法的实现。
这是我的方法:


import psycopg2
import connectDB # this is simply a module that returns a connection to the db
from datetime import datetime

class ReadFaker:
    """
    This could be extended to include the index column optionally. Right now the index
    is not inserted
    """
    def __init__(self, data):
        self.iter = data.itertuples()

    def readline(self, size=None):
        try:
            line = self.iter.next()[1:]  # element 0 is the index
            row = …
Run Code Online (Sandbox Code Playgroud)

python postgresql psycopg2 pandas

6
推荐指数
1
解决办法
9592
查看次数

在MultiIndex中插入缺少日期的0值

假设我有一个MultiIndex,它包含日期和一些类别(以下示例中的一个简单),对于每个类别,我都有一个具有某个过程值的时间序列.有观察时我只有一个值,而我现在想在那个日期没有观察时添加"0".我找到了一种看似非常低效的方法(堆叠和取消堆叠,在数百万个类别的情况下会创建许多列).

import datetime as dt
import pandas as pd

days= 4
#List of all dates that should be in the index
all_dates = [datetime.date(2013, 2, 13) - dt.timedelta(days=x)
    for x in range(days)]
df = pd.DataFrame([
    (datetime.date(2013, 2, 10), 1, 4),
    (datetime.date(2013, 2, 10), 2, 7),
    (datetime.date(2013, 2, 11), 2, 7),
    (datetime.date(2013, 2, 13), 1, 2),
    (datetime.date(2013, 2, 13), 2, 3)],
    columns = ['date', 'category', 'value'])
df.set_index(['date', 'category'], inplace=True)
print df
print df.unstack().reindex(all_dates).fillna(0).stack()
# insert 0 values for missing dates
print …
Run Code Online (Sandbox Code Playgroud)

python pandas

5
推荐指数
2
解决办法
3708
查看次数