我希望找到在dataframe列中出现重复值序列的索引。我希望结果是一个列表列表,其中每个子列表都是重复值索引的单个序列。
我当前的代码可以工作,但相当慢(10000行数据帧中10%重复的apx 15毫秒):
import pandas as pd
import numpy as np
import time
# Given a dataframe and column, return a list of lists where each sublist
# contains indexes of the sequential duplicates
def duplicate_ranges(
我使用列表理解来索引一个numpy数组,并对这些值求和: df[col]=np.array([A_numpy_array[b].sum() for b in B_numpy_array]) 我的A_numpy_array是使用B_numpy_array的元素b进行索引的(它有800-900万个元素)。 这部分代码是这个过程需要一段时间的地方,我完全用完了RAM,并开始写入磁盘。 据我所知,列表理解是Python中最有效的方法之一。此外,以这种方式设置pandas列在pandas中也很有效。 有没有其他方法可以使用b中保存的索引值对A_numpy_array进行切片,使我能够以一种更高效的内存
从几个 中,连接dataframe中的列的一种简单方法是使用map命令,如下例所示。map函数返回一个序列,那么为什么不能只使用一个常规系列而不是map呢?
import pandas as pd
df = pd.DataFrame({'a':[1,2,3],'b':[4,5,6]},index=['m','n','o'])
df['x'] = df.a.map(str) + "_x"
a b x
m 1 4 1_x
n 2 5 2_x
o
在使用熊猫DataFrames时,我发现提取列作为列表,使用列表理解,然后将其重新插入到DataFrame中比使用映射函数更快。
为了测试这一点,我创建了两个列数据框架,一个是从0到999之间的数字,另一个是这些数字的平方。然后,我添加了一个多维数据列,其值以两种不同的方式计算。
设置
数据框架被创建。数据帧有两份副本。
import pandas as pd
import numpy as np
df = pd.DataFrame({'numbers':[x for x in range(1000)],'squares':[x*x for x in rang
我有大约100个numpy数组。它们中的每个都具有(100,40000,4)的形状。我想沿着第一轴将这些数组连接起来,也就是说,有效地将axis=0连接成一个大数组。
方法1
我使用了np.concatenate,如下所示:
def concatenate(all_data):
for index, data in enumerate(all_data):
if index == 0:
arr = data.copy()
else:
arr = np.concatenate((arr, data), axi
为什么pandas.DataFrame的操作这么慢?!看下面的例子。
计量:
创建一个由随机浮点数填充的numpy.ndarray 创建一个用相同的填充的pandas.DataFrame
I度量下列操作的时间
numpy.ndarray的
- Take the sum along the 0-axis
- Take the sum along the 1-axis
pandas.DataFrame的
- Take the sum along the 0-axis
- Take the sum along the 1-axis
pandas.DataFrame.values ->
我需要获取每个列的类型,以便对其进行适当的预处理。
目前,我通过以下方法做到这一点:
import pandas as pd
# input is of type List[List[any]]
# but has one type (int, float, str, bool) per column
df = pd.DataFrame(input, columns=key_labels)
column_types = dict(df.dtypes)
matrix = df.values
由于我只使用pandas获取数据类型(每列),而使用numpy获取其他所有内容,因此我希望将panda
在我目前的工作中,我经常使用Numpy和列表理解,为了获得最好的性能,我有以下问题:
如果我像下面这样创建一个Numpy数组,幕后会发生什么呢?
a = numpy.array( [1,2,3,4] )
我的猜测是,python首先创建一个包含值的普通列表,然后使用列表大小分配一个numpy数组,然后将值复制到这个新数组中。这是正确的吗,或者解释器是否足够聪明,能够意识到列表只是中介,而不是直接复制值?
类似地,如果我希望使用numpy.fromiter()从列表理解创建一个numpy数组
a = numpy.fromiter( [ x for x in xrange(0,4) ], int
我是这个领域的新手,这个脚本用于将80%的数据随机放入训练列表,其余的20%放在测试列表中。这个脚本是有效的,但是我有几个关于它为什么有效的问题。如果len(data)为1000,那么randn( 1000 )将生成1000个服从正态分布的随机数。我不明白的是:1)我测试自己,比如1,2,3,4,5,6,7,8,9,10<5我得到了一个错误,因为左边的运算符是一个list.But,为什么check=a<0.8合法,一个应该是1000个元素的列表? import pandas as pd
import numpy as np
data = pd.read_csv('E:/
下面有一个Pandas Dataframe (A)和一个NumPy数组(B)
A =
M N C D E F
0.882367 0.207342 0.959867 0.332126 0.031896 0.055734
0.640045 0.411328 0.794058 0.090374 0.629194 0.219321
0.423837 0.304872 0.370467 0.651361 0.017515 0.252440
0.865555 0.692180 0
我在Python2.6.2中使用NumPy。我正在尝试创建一个小的(长度为3)简单的布尔数组。下面的代码给了我一个MemoryError,我认为它不应该这样做。
import numpy as np
cond = np.fromiter((x in [2] for x in [0, 1, 2]), dtype = np.bool)
它给我的错误是:
MemoryError:无法分配数组内存
但是,以下获取列表的方法(与ndarray相反)运行良好(不使用numpy):
cond = list((x in [2] for x in [0, 1, 2]))
我在Numpy代码中做错了什么吗?我的感
在ipython中,我正在计算这样的协方差运行时间
>>> from pandas import DataFrame
>>> import numpy as np
>>> # create data frame set
>>> df = get_data()
>>> df.shape
(4795, 1000)
>>> %timeit df.cov()
10 loops, best of 3: 99.5 ms per loop
>>> mat = np.matrix(df
我有一个值为pandas._libs.tslib.Timestamp的numpy.ndarray
示例:
地址:type(closedDate)
输出:numpy.ndarray
地址:type(closedDate[0])
输出:pandas._libs.tslib.Timestamp
我想将closedDate的内容转换为datetime.date的列表
我尝试过以下几种方法:
for i in closedDate:
closedDate[i].to_datetime()
但是会出现这个错误:
IndexError: only integers, slices (`:`), el
从一个 DataFrame (例如使用.loc或.iloc)中提取单个pandas行DataFrame会产生pandas Series。但是,在处理DataFrame中的异构数据时(即DataFrame的列并不都是相同的dtype),这会导致行中不同列的所有值被强制转换为单个dtype,因为Series只能有一个dtype。这里有一个简单的例子来说明我的意思:
import numpy
import pandas
a = numpy.arange(5, dtype='i8')
b = numpy.arange(5, dtype='u8')**2
c = num
我坚持使用python虚拟环境安装,尤其是pandas。
Pip列表: numpy (1.14.2) pandas (0.22.0) pip (9.0.1)
Python 3.6.4 (default, Mar 12 2018, 17:59:42)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pandas
Traceback (mos
我编写了以下模块myinit.py:
import os
import numpy as np
import pandas as pd
import datetime
复制到搜索路径。
sudo cp init.py /usr/local/lib/python3.5/dist-packages/myinit.py
现在进入我的python与cmd中python的交互环境。
import myinit
dir(pd)
NameError: name 'pd' is not defined
dir(pandas)
NameError: name 'pandas'