小编Chr*_*ris的帖子

通过非纳米值之前和之后的大熊猫填充nans

我想补dfnan平均相邻元件.

考虑一个数据帧:

df = pd.DataFrame({'val': [1,np.nan, 4, 5, np.nan, 10, 1,2,5, np.nan, np.nan, 9]})
    val
0   1.0
1   NaN
2   4.0
3   5.0
4   NaN
5   10.0
6   1.0
7   2.0
8   5.0
9   NaN
10  NaN
11  9.0
Run Code Online (Sandbox Code Playgroud)

我想要的输出是:

    val
0   1.0
1   2.5
2   4.0
3   5.0
4   7.5
5   10.0
6   1.0
7   2.0
8   5.0
9   7.0 <<< deadend
10  7.0 <<< deadend
11  9.0
Run Code Online (Sandbox Code Playgroud)

我已经研究了其他解决方案,例如含有NaN的填充单元格,其前后均值,但是在连续两次或更多次np.nan的情况下这不起作用.

任何帮助是极大的赞赏!

python pandas

23
推荐指数
2
解决办法
1345
查看次数

在创建从中继承的对象时在Python中进行条件导入

我创建了一个连接到其他库(livelossplot)的包.它有很多可选的依赖项(深度学习框架),我不想强​​迫人们安装它们.

现在我使用条件导入,本着以下精神:

try:
    from .keras_plot import PlotLossesKeras
except ImportError:
    # import keras plot only if there is keras
    pass
Run Code Online (Sandbox Code Playgroud)

但是,这意味着它会导入大型库,即使不打算使用它们也是如此.问题是:只有在创建特定对象时才能导入库?

对于Python函数,它很简单:

def function_using_keras():
   import keras
   ...
Run Code Online (Sandbox Code Playgroud)

从其他类继承的类有什么好的做法?

在定义对象之前,似乎需要导入父类:

from keras.callbacks import Callback
class PlotLossesKeras(Callback):
    ...
Run Code Online (Sandbox Code Playgroud)

python inheritance class python-import

5
推荐指数
1
解决办法
246
查看次数

如果行是其他行的子集,则 pandas 会删除该行

我已经搜索了很多,但似乎没有什么可以解决这个问题。

假设什么时候df是这样的:

import pandas as pd
import numpy as np

df = pd.DataFrame([['a','b','c'], ['a',np.nan,'b'], [np.nan, 'b', 'a'], ['a', 'd', 'b']])
df
     0    1  2
0    a    b  c
1    a  NaN  b
2  NaN    b  a
3    a    d  b
Run Code Online (Sandbox Code Playgroud)

期望的输出是:

     0    1  2
0    a    b  c
3    a    d  b
Run Code Online (Sandbox Code Playgroud)

第 1、2 行是第 0 行的子集,因此我想删除它们。当检查一行是否是任何其他行的子集时,NaN不考虑。因此,第 1 行变为{'a','b'},从而成为一个子集。

到目前为止我尝试过的是使sets:

df.ffill(1).bfill(1).apply(set, 1)
Run Code Online (Sandbox Code Playgroud)

产生:

0    {c, a, b}
1       {a, b}
2       {a, …
Run Code Online (Sandbox Code Playgroud)

python pandas

4
推荐指数
1
解决办法
574
查看次数

Numpy load.txt 不会将值转换为整数

如果我在装有 numpy 1.16.2 的 Windows 笔记本电脑上运行以下代码,它就可以工作。但是,当我在带有 numpy 1.16.4 或 1.16.2 的 Mac 上运行此代码时,它不会并给出以下错误:

以 10 为基数的 int() 的文字无效:“34.623659...”

我们尝试在 mac 设备上安装不同版本的 numpy,但是,同样的事情发生了。将 int 更改为 float 是可行的,但是,我们希望以整数形式显示值。

我们正在使用的命令:

A = np.loadtxt('ex2data1.txt', delimiter=',', dtype ='int', max_rows = 5)
print(A)
Run Code Online (Sandbox Code Playgroud)

文本文件的第一行是:

34.62365962451697,78.0246928153624,0
30.28671076822607,43.89499752400101,0
35.84740876993872,72.90219802708364,0
60.18259938620976,86.30855209546826,1
79.0327360507101,75.3443764369103,1
45.08327747668339,56.3163717815305,0
61.10666453684766,96.51142588489624,1
75.02474556738889,46.55401354116538,1
76.09878670226257,87.42056971926803,1
84.43281996120035,43.53339331072109,1
95.86155507093572,38.22527805795094,0
75.01365838958247,30.60326323428011,0
82.30705337399482,76.48196330235604,1
69.36458875970939,97.71869196188608,1
39.53833914367223,76.03681085115882,0
53.9710521485623,89.20735013750205,1
Run Code Online (Sandbox Code Playgroud)

我们期望它返回一个与文本文件中的值相同但为整数形式的数组,但是,我们收到了上面的错误。

python numpy

4
推荐指数
1
解决办法
5371
查看次数

如何根据多个值的总和删除 Pandas 中的行?

我建立了一个 df:

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randint(1,6,size=(10, 6)),
              columns=list('ABCDEF'))
df = df.applymap(lambda x: 'Sp'+str(x))
print(df)
Run Code Online (Sandbox Code Playgroud)

给出类似的东西:

     A    B    C    D    E    F
0  Sp4  Sp5  Sp4  Sp4  Sp4  Sp3
1  Sp2  Sp3  Sp5  Sp2  Sp2  Sp3
2  Sp2  Sp3  Sp2  Sp4  Sp5  Sp5
3  Sp5  Sp3  Sp1  Sp4  Sp4  Sp3
4  Sp3  Sp1  Sp1  Sp5  Sp4  Sp1
5  Sp1  Sp4  Sp4  Sp5  Sp4  Sp4
6  Sp2  Sp1  Sp3  Sp4  Sp5  Sp3
7  Sp3  Sp3 …
Run Code Online (Sandbox Code Playgroud)

python dataframe pandas

4
推荐指数
1
解决办法
79
查看次数

导入matplotlib.pyplot作为plt,ImportError:libGL.so.1:无法打开共享对象文件:没有这样的文件或目录

import matplotlib.pyplot as plt python2.7,anaconda3错误。

错误是 ImportError: libGL.so.1: cannot open shared object file: No such file or directory

错误报告

Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/serving/anaconda3/envs/python27/lib/python2.7/site-packages/matplotlib/pyplot.py", line 115, in <module>
    _backend_mod, new_figure_manager, draw_if_interactive, _show = pylab_setup()
  File "/serving/anaconda3/envs/python27/lib/python2.7/site-packages/matplotlib/backends/__init__.py", line 32, in pylab_setup
    globals(),locals(),[backend_name],0)
  File "/serving/anaconda3/envs/python27/lib/python2.7/site-packages/matplotlib/backends/backend_qt5agg.py", line 16, in <module>
    from .backend_qt5 import QtCore
  File "/serving/anaconda3/envs/python27/lib/python2.7/site-packages/matplotlib/backends/backend_qt5.py", line 26, in <module>
    import matplotlib.backends.qt_editor.figureoptions as figureoptions
  File "/serving/anaconda3/envs/python27/lib/python2.7/site-packages/matplotlib/backends/qt_editor/figureoptions.py", line 20, in <module>
    import matplotlib.backends.qt_editor.formlayout as formlayout
  File …
Run Code Online (Sandbox Code Playgroud)

python matplotlib anaconda

3
推荐指数
2
解决办法
3592
查看次数

如何以ddmmyyyy格式将日期解释为3 12而不是31 2

我的日期格式11122020 在 pandas 列中采用格式(ddmmyyyy)。

我用

datapdf["wholetime"]=pd.to_datetime(datapdf["wholetime"],format='%d%m%Y)  
Run Code Online (Sandbox Code Playgroud)

转换为时间并按时间进行处理。

最近我的代码在日期 3122020 上失败了

ValueError: day is out of range for month
Run Code Online (Sandbox Code Playgroud)

python 解释为 31 2 2020 而不是 3 12 2020 导致错误。有人对此有解决方案吗?

python datetime date strftime pandas

3
推荐指数
1
解决办法
47
查看次数

使用 pandas 和 parquet 的效率

人们经常谈论使用镶木地板和熊猫。我正在努力了解与 pandas 一起使用时我们是否可以利用 parquet 文件的全部功能。例如,假设我有一个大 parquet 文件(按年份分区),有 30 列(包括年份、州、性别、姓氏)和许多行。我想加载镶木地板文件并执行随后的类似计算

import pandas as pd
df = pd.read_parquet("file.parquet")
df_2002 = df[df.year == 2002]
df_2002.groupby(["state", "gender"])["last_name"].count()
Run Code Online (Sandbox Code Playgroud)

在此查询中仅使用 4 列(共 30 列)并且仅2002使用年份分区。这意味着我们只想引入此计算所需的列和行,并且在具有谓词和投影下推的 parquet 中可以实现类似的操作(以及我们使用 parquet 的原因)。

但我试图了解这个查询在 pandas 中的行为方式。当我们打电话的那一刻,它会把所有的事情都记起来吗df = pd.read_parquet("file.parquet)?或者这里应用了任何惰性因素来引入投影和谓词下推?如果情况并非如此,那么将 pandas 与 parquet 一起使用还有什么意义呢?任何这一切都可以通过arrow package

虽然我没用过dask只是想知道这种情况是否是在 dask 中处理的,因为他们是懒惰地执行的。

我确信这种情况在 Spark 世界中处理得很好,但只是想知道在本地场景中如何使用 pandas、arrow、dask、ibis 等包处理这些情况。

pandas parquet dask pyarrow ibis

3
推荐指数
1
解决办法
1904
查看次数

将 Simple Imputer 与 Pandas 数据框一起使用?

我正在使用以下数据集:

https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data

它说有一些用“?”标记的缺失值。我想应用 SimpleImputer 库,我的代码如下:

file="breast_cancer"
df=pd.read_csv(file,names=['id', 'clump_thickness','unif_cell_size',
                                                         'unif_cell_shape', 'marg_adhesion', 'single_epith_cell_size',
                                                         'bare_nuclei', 'bland_chromatin', 'normal_nucleoli','mitoses','class'])
df.replace('?',np.NaN,inplace=True)
imp=SimpleImputer(missing_values="NaN")
idf=pd.DataFrame(imp.fit_transform(df))
idf.columns=df.columns
idf.index=df.index
Run Code Online (Sandbox Code Playgroud)

所以我想替换所有的?来自所有具有均值的列的值,并返回一个新的数据框。问题是我收到以下错误:

Input contains NaN, infinity or a value too large for dtype('float64').
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

谢谢

python pandas scikit-learn

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

熊猫分组并将行转换为列

我有如下销售数据集:df1

district      item       Year    salesAmount
Arba          pen        2019    10
Arba          pen        2019    20
Arba          pencil     2018    30
Arba          pencil     2018    30
Arba          pencil     2019    30
Cebu          pen        2019    100
Cebu          pen        2019    300
Cebu          pen        2018    100
Cebu          pen        2018    100
Cebu          pen        2019    100
Cebu          laptop     2019    20000
Cebu          laptop     2018    20000
Cebu          fruit      2019    200
Cebu          fruit      2018    800
Cebu          fruit      2019    800
Cebu          fruit      2018    100
Run Code Online (Sandbox Code Playgroud)

我可以完成 groupby 并分别获得 2018 年和 2019 年每个产品的总和。

result = df1.groupby(['district', 'item', …
Run Code Online (Sandbox Code Playgroud)

python dataframe pandas pandas-groupby

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

如何删除此数字范围内的最后一个逗号?(Python)

def numbex(n):
    if n == 1:
        return 2
    elif n > 1:
        return numbex(n-1)*(-3)
for num in range(1,11):
    x=numbex(num)
    print(x, end=",")
Run Code Online (Sandbox Code Playgroud)

输出

2,-6,18,-54,162,-486,1458,-4374,13122,-39366,
Run Code Online (Sandbox Code Playgroud)

python

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

如何在列表 Python 中找到重复次数最多的元素?

我目前正在为此使用 Counter() 方法。但我面临的问题是,当有多个元素具有相同数量的值时,我会得到列表中最先出现的 number 键值。

a=[1,3,2,2,3]  
coun=Counter(a)
print(coun.most_common(1))
Run Code Online (Sandbox Code Playgroud)

输出: [(3,2)]

a=[1,2,3,2,3]  
coun=Counter(a)
print(coun.most_common(1))
Run Code Online (Sandbox Code Playgroud)

输出: [(2,2)]

我想获得较低的键值,而不是首先出现的键值,即 2,无论顺序如何。我可以对列表进行排序,但我认为排序会占用大量时间。请帮忙 抱歉格式混乱。

python counter list python-3.x

0
推荐指数
1
解决办法
94
查看次数