- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
您好,我正在尝试使用 pandas 来整理 DataFrame。它是从电子表格导入的,有一些空行和空列。
我以为我可以用
df.apply(numpy.nonzero(),axis=1)
和 df.apply(numpy.nonzero(),axis=0)
获取索引的非零列,以便我可以从 DataFrame 中删除逆向。这给了我一个元组列表,我不清楚如何获取。
numpy.nonzero(df)
生成所有非零值的数组,但我不确定如何将该值输入 all()
函数.
我的问题是,从 DataFrame 中删除那些全部为空(或全部具有 N/A 等值)的索引行和列的最佳和最快方法是什么
谢谢
添加源电子表格的编辑示例
<bound method DataFrame.head of 0 1 2 3 4 5 6 7 8 9 \
0
1 some title
2 date 38477
3
4
5 cat1 cat2 cat3
6 a b c d e f
7
8 Z 167.9404 151.1389 346.197 434.3589 336.7873 80.52901
9 X 220.683 56.0029 73.73679 428.8939 483.7445 251.1877
10 C 433.0189 390.1931 251.6636 418.6703 12.21859 113.093
11
12 V 226.0135 418.1141 310.2038 153.9018 425.7491 73.08073
13 W 295.146 173.2747 2.187459 401.6453 51.47293 175.387
14 S 306.9325 157.2772 464.1394 216.248 478.3903 173.948
15 A 19.86611 73.11554 320.078 199.7598 467.8272 234.0331
16
17 F 225.511 20.97305 425.8834 190.1625 123.9103 116.3803
18 R 130.4728 96.08118 428.2007 22.46184 26.34678 359.5625
19 E 239.1516 439.7733 197.7023 121.6911 195.0169 264.5553
20 W 227.1557 471.8341 165.3779 151.7552 314.7827 367.0868
这是我目前正在使用的 def,但感觉很笨重
def nulls(x):
''' the NULS section to clear all nulls from the
DataFrame'''
# Empty Rows
nr = [i for i in x.index if all(str(k) in '' for k in x.ix[i])]
# Non Empty Rows
r = [i for i in x.index if i not in nr]
# Empty columns
nc = [j for j in range(x.shape[1]) if all(str(k) in '' for k in x[j])]
# Non Empty Columns
c = [j for j in range(x.shape[1]) if j not in nc]
# Subset the non-empties
x=x.ix[r,c]
x=x.reindex()
return(x)
最佳答案
dropna(how='all')
是您正在寻找的(通常),但您需要以将空单元格视为 NaN 的方式加载数据框
而不是空字符串。也就是说,您在这里有几个选择。
如果您确定要删除的所有内容都是文字空字符串 (''
, None
, np.NaN
,或者 0
) and 你不想保留 0
,那么你可以只填充 NaN
和转换为 bool 值并检查总和是否为 0。您可以根据要删除的方式进行调整。
indexer = df.fillna(False).astype(bool)
drop_columns = indexer.sum(0) == 0
keep_rows = indexer.sum(1) != 0
new_df = df.drop(df.columns[drop_columns], axis=1)[keep_rows]
但是,如果您需要检查空格,或者想要排除文字零,那么您应该将 applymap
与函数一起使用(主要基于 this StackOverflow answer on dropping None/empty/whitespace columns ),然后执行相同的操作如上。
def is_blank(x):
return x is None or pd.isnull(x) or bool(str(x).strip())
indexer = df.applymap(is_blank)
但就个人而言,我建议您在加载数据集时将 ''
添加到 na_values
。
fillna()
和astype()
的简单解释 fillna()
让您用其他值“填充”NA
值。在这里,我们填充 False(因为 bool(float('nan'))
的计算结果为 True),但您可以填充任何值或使用各种不同的方法。 astype
将数组从一种类型转换为另一种类型。所以放置 astype(bool)
意味着它将整个数组转换为 True
或 False
(相当于 1
和 0
),然后您可以求和以找到行或列中 True
值的数量。
关于Python Pandas 找到非零索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16755731/
pandas.crosstab 和 Pandas 数据透视表似乎都提供了完全相同的功能。有什么不同吗? 最佳答案 pivot_table没有 normalize争论,不幸的是。 在 crosstab
我能找到的最接近的答案似乎太复杂:How I can create an interval column in pandas? 如果我有一个如下所示的 pandas 数据框: +-------+ |
这是我用来将某一行的一列值移动到同一行的另一列的当前代码: #Move 2014/15 column ValB to column ValA df.loc[(df.Survey_year == 201
我有一个以下格式的 Pandas 数据框: df = pd.DataFrame({'a' : [0,1,2,3,4,5,6], 'b' : [-0.5, 0.0, 1.0, 1.2, 1.4,
所以我有这两个数据框,我想得到一个新的数据框,它由两个数据框的行的克罗内克积组成。正确的做法是什么? 举个例子:数据框1 c1 c2 0 10 100 1 11 110 2 12
TL;DR:在 pandas 中,如何绘制条形图以使其 x 轴刻度标签看起来像折线图? 我制作了一个间隔均匀的时间序列(每天一个项目),并且可以像这样很好地绘制它: intensity[350:450
我有以下两个时间列,“Time1”和“Time2”。我必须计算 Pandas 中的“差异”列,即 (Time2-Time1): Time1 Time2
从这个 df 去的正确方法是什么: >>> df=pd.DataFrame({'a':['jeff','bob','jill'], 'b':['bob','jeff','mike']}) >>> df
我想按周从 Pandas 框架中的列中累积计算唯一值。例如,假设我有这样的数据: df = pd.DataFrame({'user_id':[1,1,1,2,2,2],'week':[1,1,2,1,
数据透视表的表示形式看起来不像我在寻找的东西,更具体地说,结果行的顺序。 我不知道如何以正确的方式进行更改。 df示例: test_df = pd.DataFrame({'name':['name_1
我有一个数据框,如下所示。 Category Actual Predicted 1 1 1 1 0
我有一个 df,如下所示。 df: ID open_date limit 1 2020-06-03 100 1 2020-06-23 500
我有一个 df ,其中包含与唯一值关联的各种字符串。对于这些唯一值,我想删除不等于单独列表的行,最后一行除外。 下面使用 Label 中的各种字符串值与 Item 相关联.所以对于每个唯一的 Item
考虑以下具有相同名称的列的数据框(显然,这确实发生了,目前我有一个像这样的数据集!:() >>> df = pd.DataFrame({"a":range(10,15),"b":range(5,10)
我在 Pandas 中有一个 DF,它看起来像: Letters Numbers A 1 A 3 A 2 A 1 B 1 B 2
如何减去两列之间的时间并将其转换为分钟 Date Time Ordered Time Delivered 0 1/11/19 9:25:00 am 10:58:00 am
我试图理解 pandas 中的下/上百分位数计算,但有点困惑。这是它的示例代码和输出。 test = pd.Series([7, 15, 36, 39, 40, 41]) test.describe(
我有一个多索引数据框,如下所示: TQ bought HT Detailed Instru
我需要从包含值“低”,“中”或“高”的数据框列创建直方图。当我尝试执行通常的df.column.hist()时,出现以下错误。 ex3.Severity.value_counts() Out[85]:
我试图根据另一列的长度对一列进行子串,但结果集是 NaN .我究竟做错了什么? import pandas as pd df = pd.DataFrame([['abcdefghi','xyz'],
我是一名优秀的程序员,十分优秀!