小编Zhu*_*arb的帖子

将包含NaN的Pandas列转换为dtype`int`

我将.csv文件中的数据读取到Pandas数据帧,如下所示.对于其中一列,即id我想将列类型指定为int.问题是id系列缺少/空值.

当我尝试id在读取.csv时将列转换为整数时,我得到:

df= pd.read_csv("data.csv", dtype={'id': int}) 
error: Integer column has NA values
Run Code Online (Sandbox Code Playgroud)

或者,我尝试在阅读后转换列类型,如下所示,但这次我得到:

df= pd.read_csv("data.csv") 
df[['id']] = df[['id']].astype(int)
error: Cannot convert NA to integer
Run Code Online (Sandbox Code Playgroud)

我怎么解决这个问题?

python pandas na

132
推荐指数
9
解决办法
13万
查看次数

Pandas:将Series的数据类型更改为String

我在Python 2.7中使用Pandas'ver 0.12.0',并拥有如下数据帧:

df = pd.DataFrame({'id' : [123,512,'zhub1', 12354.3, 129, 753, 295, 610],
                    'colour': ['black', 'white','white','white',
                            'black', 'black', 'white', 'white'],
                    'shape': ['round', 'triangular', 'triangular','triangular','square',
                                        'triangular','round','triangular']
                    },  columns= ['id','colour', 'shape'])
Run Code Online (Sandbox Code Playgroud)

id系列包含一些整数和字符串.它dtype默认是object.我想将所有内容转换id为字符串.我试过astype(str),它产生下面的输出.

df['id'].astype(str)
0    1
1    5
2    z
3    1
4    1
5    7
6    2
7    6
Run Code Online (Sandbox Code Playgroud)

1)如何将所有元素转换id为String?

2)我最终将id用于索引数据帧.与具有整数索引相比,数据帧中的String索引会减慢速度吗?

python series pandas

48
推荐指数
6
解决办法
21万
查看次数

Matplotlib:在轮廓图上散布到前景图

有没有人知道在matplotlib中将散点图带到前台的方法?我必须在轮廓顶部显示散点图,但默认情况下会在下面绘制...

提前致谢!

python scatter matplotlib scatter-plot

29
推荐指数
1
解决办法
2万
查看次数

具有多索引列的Pandas数据框 - 合并级别

我有一个数据框,有多grouped索引列,如下所示:

import pandas as pd
codes = ["one","two","three"];
colours = ["black", "white"];
textures = ["soft", "hard"];
N= 100 # length of the dataframe
df = pd.DataFrame({ 'id' : range(1,N+1),
                    'weeks_elapsed' : [random.choice(range(1,25)) for i in range(1,N+1)],
                    'code' : [random.choice(codes) for i in range(1,N+1)],
                    'colour': [random.choice(colours) for i in range(1,N+1)],
                    'texture': [random.choice(textures) for i in range(1,N+1)],
                    'size': [random.randint(1,100) for i in range(1,N+1)],
                    'scaled_size': [random.randint(100,1000) for i in range(1,N+1)]
                   },  columns= ['id', 'weeks_elapsed', 'code','colour', 'texture', 'size', 'scaled_size'])
grouped = df.groupby(['code', …
Run Code Online (Sandbox Code Playgroud)

python multi-index pandas

29
推荐指数
4
解决办法
2万
查看次数

多个观测变量的隐马尔可夫模型

我试图使用隐马尔可夫模型(HMM)来解决一个问题,即我在每个时间点都有不同的观察变量(Yti)和一个隐藏变量(Xt).为清楚起见,让我们假设所有观察到的变量(Yti)都是分类的,其中每个Yti传达不同的信息,因此可能具有不同的基数.下图给出了一个说明性的例子,其中M = 3.

在此输入图像描述

我的目标是使用Baum-Welch算法从我观察到的变量序列(Yti)中训练HMM的过渡,发射和先验概率.比方说,Xt最初会有2个隐藏状态.

我已经阅读了一些教程(包括着名的Rabiner论文),并阅读了一些HMM软件包的代码,即" MatLab中HMM工具箱 "和" Python中hmmpytk包 ".总的来说,我进行了广泛的网络搜索,我所能找到的所有资源 - 仅涵盖了每个时间点只有一个观察变量(M = 1)的情况.这越来越让我觉得HMM不适合具有多个观察变量的情况.

  • 是否有可能将图中描述的问题建模为HMM?
  • 如果是,如何修改Baum-Welch算法以满足基于多变量观测(发射)概率训练HMM参数的需要?
  • 如果没有,您是否知道更适合图中所示情况的方法?

谢谢.

编辑:本文中,图中描述的情况被描述为动态朴素贝叶斯,其中 - 在训练和估计算法方面 - 需要对单变量HMM略微扩展Baum-Welch和Viterbi算法.

machine-learning time-series hidden-markov-models

17
推荐指数
1
解决办法
2万
查看次数

熊猫:两个数据帧的元素乘法

我知道如何在两个Pandas数据帧之间进行逐元素乘法.但是,当两个数据帧的尺寸不兼容时,事情变得更加复杂.例如下面df * df2是直截了当的,但是df * df3有一个问题:

df = pd.DataFrame({'col1' : [1.0] * 5, 
                   'col2' : [2.0] * 5, 
                   'col3' : [3.0] * 5 }, index = range(1,6),)
df2 = pd.DataFrame({'col1' : [10.0] * 5, 
                    'col2' : [100.0] * 5, 
                    'col3' : [1000.0] * 5 }, index = range(1,6),)
df3 = pd.DataFrame({'col1' : [0.1] * 5}, index = range(1,6),)

df.mul(df2, 1) # element by element multiplication no problems

df.mul(df3, 1) # df(row*col) is not equal to df3(row*col)
   col1 …
Run Code Online (Sandbox Code Playgroud)

python multiplication dataframe pandas

16
推荐指数
3
解决办法
4万
查看次数

熊猫:链式作业

我一直在阅读这个链接的"返回视图与副本".我真的不明白的是如何链接分配在熊猫的概念工作和如何的使用.ix(),.iloc()或者.loc()影响它.

我得到SettingWithCopyWarning以下代码行的警告,其中data是Panda数据帧,并且amount是该数据帧中的列(系列)名称:

data['amount'] = data['amount'].astype(float)

data["amount"].fillna(data.groupby("num")["amount"].transform("mean"), inplace=True)

data["amount"].fillna(mean_avg, inplace=True)
Run Code Online (Sandbox Code Playgroud)

看看这段代码,我做的事情显然不是很理想吗?如果是这样,你能告诉我更换代码行吗?

我知道下面的警告,并且认为我的案例中的警告是误报:

链式分配警告/异常旨在通知用户可能无效的分配.可能存在误报; 无意中报告链式作业的情况.

编辑:导致第一次复制警告错误的代码.

data['amount'] = data.apply(lambda row: function1(row,date,qty), axis=1) 
data['amount'] = data['amount'].astype(float)

def function1(row,date,qty):
    try:
        if(row['currency'] == 'A'):
            result = row[qty]
        else:
            rate = lookup[lookup['Date']==row[date]][row['currency'] ]
            result = float(rate) * float(row[qty])
        return result
    except ValueError: # generic exception clause
        print "The current row causes an exception:"
Run Code Online (Sandbox Code Playgroud)

python copy pandas chained-assignment

15
推荐指数
1
解决办法
1万
查看次数

Python line_profiler代码示例

我试图弄清楚如何运行Python的line_profiler来逐行执行这个问题的答案中给出的格式.

我安装了模块并调用它的LineProfiler对象如下所示,但我得到的输出只是一次,而不是逐行汇总.

有任何想法吗?此外,我如何获得numbers = [random.randint(1,100) for i in range(1000)]任何功能之外的线路的时间?

from line_profiler import LineProfiler
import random

def do_stuff(numbers):

    s = sum(numbers)
    l = [numbers[i]/43 for i in range(len(numbers))]
    m = ['hello'+str(numbers[i]) for i in range(len(numbers))]

numbers = [random.randint(1,100) for i in range(1000)]
profile = LineProfiler(do_stuff(numbers))
profile.print_stats()
[] Timer unit: 3.20721e-07 s
Run Code Online (Sandbox Code Playgroud)

python profiling line-profiler

15
推荐指数
2
解决办法
1万
查看次数

Python相当于R的集群包中的daisy()

我有一个包含分类(名义和序数)和数字属性的数据集.我想使用这些混合属性在我的观察中计算(dis)相似性矩阵.使用R中集群包的daisy()函数,我可以很容易地获得如下的相异矩阵:

if(!require("cluster")) { install.packages("cluster");  require("cluster") }
data(flower)
as.matrix(daisy(flower, metric = "gower"))
Run Code Online (Sandbox Code Playgroud)

这使用gower度量来处理名义变量.是否有一个Python相当于daisy()R 中的函数?

或者也许任何其他模块函数允许使用Gower指标或类似的东西计算具有混合(名义,数字)属性的数据集的(dis)相似性矩阵?

python r similarity categorical-data r-daisy

12
推荐指数
2
解决办法
8489
查看次数

Pandas使用TimeStamp索引对齐多个数据帧

在过去的几天里,这一直是我生命中的祸根.我有许多Pandas Dataframes包含不规则频率的时间序列数据.我尝试将这些对齐到一个数据帧中.

下面是一些代码,具有代表性的dataframes, ,df1,df2df3(其实我的n = 5,并希望得到一个解决方案,将所有的工作n>2):

# df1, df2, df3 are given at the bottom
import pandas as pd
import datetime

# I can align df1 to df2 easily
df1aligned, df2aligned = df1.align(df2)
# And then concatenate into a single dataframe
combined_1_n_2 = pd.concat([df1aligned, df2aligned], axis =1 )
# Since I don't know any better, I then try to align df3 to combined_1_n_2  manually:
combined_1_n_2.align(df3)
error: Reindexing only valid with uniquely valued …
Run Code Online (Sandbox Code Playgroud)

python concatenation time-series pandas

11
推荐指数
1
解决办法
1万
查看次数