我有一个包含这种类型数据的数据框(列太多):
col1 int64
col2 int64
col3 category
col4 category
col5 category
Run Code Online (Sandbox Code Playgroud)
列似乎是这样的:
Name: col3, dtype: category
Categories (8, object): [B, C, E, G, H, N, S, W]
Run Code Online (Sandbox Code Playgroud)
我想将列中的所有值转换为整数,如下所示:
[1, 2, 3, 4, 5, 6, 7, 8]
Run Code Online (Sandbox Code Playgroud)
我通过这个解决了一个问题:
dataframe['c'] = pandas.Categorical.from_array(dataframe.col3).codes
Run Code Online (Sandbox Code Playgroud)
现在我的数据框中有两列 - 旧的'col3'和新的'c',需要删除旧列.
这是不好的做法.这是工作,但在我的数据框架中有很多列,我不想手动完成.
这个pythonic怎么这么巧妙?
如何从列中删除pandas.DataFrame很少发生的值,即频率较低?例:
In [4]: df[col_1].value_counts()
Out[4]: 0 189096
1 110500
2 77218
3 61372
...
2065 1
2067 1
1569 1
dtype: int64
Run Code Online (Sandbox Code Playgroud)
所以,我的问题是:如何删除像2065, 2067, 1569和其他人一样的价值观?我怎么能对包含.value_counts()这样的所有列执行此操作?
更新:关于'低'我的意思是像2065.此值出现col_11(一)次,我想删除这样的值.
我尝试在IPython Notebook中运行Apache Spark,遵循这个insruction(和评论中的所有建议) - 链接
但是当我通过这个命令运行IPython Notebook时:
ipython notebook --profile=pyspark
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
Error: Must specify a primary resource (JAR or Python or R file)
Run Code Online (Sandbox Code Playgroud)
如果我在shell中运行pyspark,一切正常.这意味着我在连接Spark和IPython时遇到了一些麻烦.
顺便说一句,这是我的bash_profile:
export SPARK_HOME="$HOME/spark-1.4.0"
export PYSPARK_SUBMIT_ARGS='--conf "spark.mesos.coarse=true" pyspark-shell'
Run Code Online (Sandbox Code Playgroud)
这包含〜/ .ipython/profile_pyspark/startup/00-pyspark-setup.py:
# Configure the necessary Spark environment
import os
import sys
# Spark home
spark_home = os.environ.get("SPARK_HOME")
# If Spark V1.4.x is detected, then add ' pyspark-shell' to
# the end of the 'PYSPARK_SUBMIT_ARGS' environment variable
spark_release_file = spark_home + "/RELEASE"
if os.path.exists(spark_release_file) and "Spark 1.4" …Run Code Online (Sandbox Code Playgroud) 我有pandas.DataFrame太多列.
我打电话:
In [2]: X.dtypes
Out[2]: VAR_0001 object
VAR_0002 int64
...
VAR_5000 int64
VAR_5001 int64
Run Code Online (Sandbox Code Playgroud)
我无法理解我VAR_0002和之间的数据类型VAR_5000
它可以是int64,int8,float64等.我在这个博客中看到了原生类型,pandas.DataFrame但我认为这是错误的信息.我怎么能得到这个?
还有其他问题.当我在PC(Windows)上工作并调用它:
In [3]: X.dtypes[X.dtypes.map(lambda x: x=='bool')]
Run Code Online (Sandbox Code Playgroud)
我用这种类型的数据获得了几列.但是当我在Mac上使用此命令时,我什么也得不到.WAT?
我有pandas.DataFrame太多的列。我想选择行中值等于0和的所有列1。所有列的类型是int64,我无法按object或其他类型选择它们。我怎样才能做到这一点?
我的fit_transform功能有问题.有人可以解释为什么数组的大小不同?
In [5]: X.shape, test.shape
Out[5]: ((1000, 1932), (1000, 1932))
In [6]: from sklearn.feature_selection import VarianceThreshold
sel = VarianceThreshold(threshold=(.8 * (1 - .8)))
features = sel.fit_transform(X)
features_test = sel.fit_transform(test)
In [7]: features.shape, features_test.shape
Out[7]:((1000, 1663), (1000, 1665))
Run Code Online (Sandbox Code Playgroud)
UPD:哪种转换可以帮助我获得相同大小的数组?
我想删除多个列pandas.DataFrame,但不能这样做。
In [10]: object_columns = X.select_dtypes(['object']).columns
In [10]: type(object_columns)
Out[10]: pandas.core.index.Index
In [11]: X = X.drop(object_columns, inplace=True, axis=1)
ValueError: labels ['VAR_0001' 'VAR_0005' 'VAR_0044' 'VAR_0073'] not contained in axis
Run Code Online (Sandbox Code Playgroud)
我更改了代码,但没有帮助:
In [12]: X = X.drop(X[object_columns], inplace=True, axis=1)
KeyError: "['VAR_0001' 'VAR_0005' 'VAR_0044' 'VAR_0073'] not in index"
Run Code Online (Sandbox Code Playgroud)
谁能解释我做错了什么?