小编Dan*_*rty的帖子

Pandas从列表中创建数据框列

鉴于以下列表:

list=['a','b','c']
Run Code Online (Sandbox Code Playgroud)

我想创建一个数据框,其中列表是值列.我希望标题是"标题".

像这样:

header
a
b
c
Run Code Online (Sandbox Code Playgroud)

提前致谢!

python dataframe python-3.x pandas

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

大熊猫在没有周末的情况下创造日期

给出以下数据框:

import pandas as pd
df=pd.DataFrame({'A':['a','b','c'],
        'first_date':['2015-08-31 00:00:00','2015-08-24 00:00:00','2015-08-25 00:00:00']})
df.first_date=pd.to_datetime(df.first_date) #(dtype='<M8[ns]')
df['last_date']=pd.to_datetime('5/6/2016') #(dtype='datetime64[ns]')
df

    A   first_date   last_date
0   a   2015-08-31  2016-05-06
1   b   2015-08-24  2016-05-06
2   c   2015-08-25  2016-05-06
Run Code Online (Sandbox Code Playgroud)

我想创建一个新列,其中包含'first_date'和'last_date'之间的日期列表(或数组),它排除了周末.

到目前为止,我试过这个:

pd.date_range(df['first_date'],df['last_date'])
Run Code Online (Sandbox Code Playgroud)

...但发生此错误:

TypeError: Cannot convert input to Timestamp
Run Code Online (Sandbox Code Playgroud)

我也在pd.date_range之前试过这个...

pd.Timestamp(df['first_date'])
Run Code Online (Sandbox Code Playgroud)

......但没有骰子.

提前致谢!

PS:

在这个障碍之后,我将尝试查看其他日期列表,如果它们属于生成的数组('A'中的每一行),则将它们从列表或数组中减去.我会把它作为一个单独的问题发布.

timestamp date-range python-3.x pandas

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

XLSXWriter 通过动态单元格引用跨列应用公式

以下是 XSLX Writer 文档中的示例:

worksheet.write_formula('A1', '=10*B1 + C1')
Run Code Online (Sandbox Code Playgroud)

看起来很简单。但是如果我想将此公式应用于“A1:A30”怎么办?另外,如果在单元格 A3 中,公式应动态更新为:

'=10*B3 + C3'
Run Code Online (Sandbox Code Playgroud)

我无法通过查看文档来做到这一点。我看到 write_array_formula 是一个很有前途的选项,但我不需要数组公式。

我提出了一种涉及循环每一行和每一列的解决方案,但我希望有一个更简单的解决方案。

python-3.x xlsxwriter

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

ReportLab 和 pdfrw:导入扫描的 PDF

使用下面的代码,我试图将 pdf 页面导入现有的画布对象并保存为 PDF。这通常工作得很好,但我注意到当我尝试使用从扫描文档生成的 PDF 时,它会导致一个空白页面。有接班人吗?

from reportlab.pdfgen import canvas
from pdfrw import PdfReader
from pdfrw.buildxobj import pagexobj
from pdfrw.toreportlab import makerl

c = canvas.Canvas(Out_Folder+pdf_file_name)
c.setPageSize([11*inch, 8.5*inch])

page = PdfReader(folder+'2_VisionMissionValues.pdf',decompress=False).pages
p = pagexobj(page[0])
c.setPageSize([11*inch, 8.5*inch]) #Set page size (for landscape)
c.doForm(makerl(c, p))
c.showPage()
c.save()
Run Code Online (Sandbox Code Playgroud)

提前致谢!

reportlab pdf-reader pdfrw

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

如果不是 NaN,Pandas 会从列中获取值

给定以下数据框:

import pandas as pd
import numpy as np
df = pd.DataFrame({'A':['One','Two',np.nan],
                   'B':[np.nan,np.nan,'Three'],
                   })
df

    A       B
0   One     NaN
1   Two     NaN
2   NaN     Three
Run Code Online (Sandbox Code Playgroud)

我想创建一列(“C”),如果它不是 NaN,则它采用“A”或“B”的值,如下所示:

    A       B        C
0   One     NaN      One
1   Two     NaN      Two
2   NaN     Three    Three
Run Code Online (Sandbox Code Playgroud)

提前致谢!

python-3.x pandas

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

具有r'的变量路径

我要替换为:path = r'C:/ Folder与此:path = r'variable

变量在其他地方定义的地方。

在不确定如何将变量名放在r'之后

python path

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

Python Matplotlib:图文本将不会向左对齐

我正在尝试获取红色圆点的值(“ y2”的值)以绘制到圆点的左侧。我正在使用ha ='left',但无济于事。我尝试了以下两个方法:

for a,b in zip(ind, y2):
    plt.text(a, b, str(b), fontsize=14, color='black', va='center', ha='left)

#OR:
for i, text in enumerate(y2):
    ax.annotate(str(text), (ind[i],y2[i]), ha='left')
Run Code Online (Sandbox Code Playgroud)

这是完整的代码:

import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
%matplotlib inline
df0=pd.read_csv('sample1.csv')

import matplotlib.pyplot as plt

# You typically want your plot to be ~1.33x wider than tall.
# Common sizes: (10, 7.5) and (12, 9)
fig, ax = plt.subplots(1, 1, figsize=(12, 9))
plt.xticks(ind, x_axis, fontsize=14)
#Set y-axis font size …
Run Code Online (Sandbox Code Playgroud)

python matplotlib

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

MatPlotLib 注释时出现关键错误:0

在这段代码中,我尝试创建一个条形图,其中一个条形图(作为将放置在其他条形图旁边的“总”条形图)和数据框的切片。它适用于数据帧的其他切片,但对于“总”切片(只是一行),我不断收到此“关键错误:0”:

x_4t = dfCOPN['Percent'][-1:]
y_4t = dfCOPN['index'][-1:]
ind4t = np.arange(len(y_4t))
Run Code Online (Sandbox Code Playgroud)

...

for i, text in enumerate(ind4t):
    if x_4t<72:
        ax4t.annotate(str(x_4t)[:-2]+"%", xy=(x_4t+2,ind4t+0.4),fontsize=9, color='black', va='center', ha='left')
    elif x_4t>=72:
        ax4t.annotate(str(x_4t[i])[:-2]+"%", xy=(x_4t[i]-2,ind4t[i]+0.4),fontsize=9, color='white', va='center', ha='right')
Run Code Online (Sandbox Code Playgroud)

这是错误:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-42-e192a1699cc5> in <module>()
    174 #    for i, text in enumerate(ind4t):
--> 175     if x_4t<72:
    176         ax4t.annotate(str(x_4t)[:-2]+"%", xy=(x_4t+2,ind4t+0.4),fontsize=9, color='black', va='center', ha='left')

C:\Users\m\Anaconda3\lib\site-packages\pandas\core\generic.py in __nonzero__(self)
    729                          "Use a.empty, a.bool(), a.item(), a.any() or a.all()."
--> 730                          .format(self.__class__.__name__))
    731 

ValueError: The truth value of a Series …
Run Code Online (Sandbox Code Playgroud)

python-3.x pandas

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

基于其他单元格的 Xlsx Writer 条件格式

鉴于此格式和条件格式:

# Add a format. Light red fill.
format1 = workbook.add_format({'bg_color': '#FFC7CE'})
worksheet.conditional_format('B2:B14', 
{'type':'cell', 
'criteria': '<', 
'value': 1, 
'format': format1
})
Run Code Online (Sandbox Code Playgroud)

如果相应的单元格 C2:C14 满足条件,我想将此条件应用于单元格 B2:B14。例如,如果单元格 C2 小于 1,则将格式应用于单元格 B2。

@jmcnamara ?

提前致谢!

python-3.x xlsxwriter

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

Python在列表中运行总和

鉴于以下列表:

a=[1,2,3]
Run Code Online (Sandbox Code Playgroud)

我想生成一个新列表,其中每个数字是它和它之前的值的总和,如下所示:

result = [1,3,6]
Run Code Online (Sandbox Code Playgroud)

逻辑:

1没有先前的值,所以它保持不变.

3是从第一个值(1)加到列表中的第二个数字的值(2)

6是来自前两个元素的1和2的总和,加上3的第三个值.

提前致谢!

python numpy sum running-total cumulative-sum

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

Pandas 用组值填充 NA

给定以下数据框:

import pandas as pd
import numpy as np
df = pd.DataFrame({'Site':['A','A','A','B','B','B','C','C','C'],
                   'Value':[np.nan,1,np.nan,np.nan,2,2,3,np.nan,3]})

df

    Site    Value
0   A       NaN
1   A       1.0
2   A       NaN
3   B       NaN
4   B       2.0
5   B       2.0
6   C       3.0
7   C       NaN
8   C       3.0
Run Code Online (Sandbox Code Playgroud)

我想用站点的最常见(中位数或平均值)值填充 NaN 值。想要的结果是:

    Site    Value
0   A       1.0
1   A       1.0
2   A       1.0
3   B       2.0
4   B       2.0
5   B       2.0
6   C       3.0
7   C       3.0
8   C       3.0
Run Code Online (Sandbox Code Playgroud)

提前致谢!

更新:这很接近,但没有雪茄:

df['Value']=df.groupby(['Site'])['Value'].fillna(min)
Run Code Online (Sandbox Code Playgroud)

导致...

    Site …
Run Code Online (Sandbox Code Playgroud)

python-3.x pandas

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