我想补df的nan平均相邻元件.
考虑一个数据帧:
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的情况下这不起作用.
任何帮助是极大的赞赏!
我创建了一个连接到其他库(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) 我已经搜索了很多,但似乎没有什么可以解决这个问题。
假设什么时候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) 如果我在装有 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)
我们期望它返回一个与文本文件中的值相同但为整数形式的数组,但是,我们收到了上面的错误。
我建立了一个 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) 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) 我的日期格式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 导致错误。有人对此有解决方案吗?
人们经常谈论使用镶木地板和熊猫。我正在努力了解与 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 等包处理这些情况。
我正在使用以下数据集:
它说有一些用“?”标记的缺失值。我想应用 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)
我错过了什么?
谢谢
我有如下销售数据集: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) 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) 我目前正在为此使用 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 ×11
pandas ×7
dataframe ×2
anaconda ×1
class ×1
counter ×1
dask ×1
date ×1
datetime ×1
ibis ×1
inheritance ×1
list ×1
matplotlib ×1
numpy ×1
parquet ×1
pyarrow ×1
python-3.x ×1
scikit-learn ×1
strftime ×1