我将.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 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索引会减慢速度吗?
有没有人知道在matplotlib中将散点图带到前台的方法?我必须在轮廓顶部显示散点图,但默认情况下会在下面绘制...
提前致谢!
我有一个数据框,有多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) 我试图使用隐马尔可夫模型(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和Viterbi算法.
我知道如何在两个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) 我一直在阅读这个链接的"返回视图与副本".我真的不明白的是如何链接分配在熊猫的概念工作和如何的使用.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的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) 我有一个包含分类(名义和序数)和数字属性的数据集.我想使用这些混合属性在我的观察中计算(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)相似性矩阵?
在过去的几天里,这一直是我生命中的祸根.我有许多Pandas Dataframes包含不规则频率的时间序列数据.我尝试将这些对齐到一个数据帧中.
下面是一些代码,具有代表性的dataframes, ,df1,df2和df3(其实我的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 ×9
pandas ×6
time-series ×2
copy ×1
dataframe ×1
matplotlib ×1
multi-index ×1
na ×1
profiling ×1
r ×1
r-daisy ×1
scatter ×1
scatter-plot ×1
series ×1
similarity ×1