小编Fab*_*nna的帖子

通过pandas dataframe中的另一个列内容填充NaN列

我有一个数据框,其中一列有很多NaN值.当NaN在列中时,我需要通过另一个列值更新这些值.

    One    Two
0    10    21

1    11    NaN

2    12    25
Run Code Online (Sandbox Code Playgroud)

我想要这样的结果

    One    Two

0    10    21

1    11    **11**

2    12    25
Run Code Online (Sandbox Code Playgroud)

请帮助我在第二列中进行切片合成,并让Nafill检测从第一列复制值.

这是创建第一个矩阵的代码:

 df = pd.DataFrame({'One' : [10, 11, 12], 'Two' : [21, np.NAN, 25]})
Run Code Online (Sandbox Code Playgroud)

python pandas

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

pandas - 检查dataframe groupby中的非唯一值

我有这个简单的数据帧df:

a,b
1,2
1,3
1,4
1,2
2,1
2,2
2,3
2,5
2,5
Run Code Online (Sandbox Code Playgroud)

我想检查一下b每个组中是否有重复项a.到目前为止,我做了以下事情:

g = df.groupby('a')['b'].unique()
Run Code Online (Sandbox Code Playgroud)

返回:

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

但我想要的是一个列表,对于每个组中的a多个事件b.在这种情况下的预期输出将是:

a
1    [2]
2    [5]
Run Code Online (Sandbox Code Playgroud)

python pandas

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

熊猫和seaborn - 没有颜色的热图

我一直在努力seaborn和它的heatmap功能.我想构建一个带有来自pandas dataframe的带注释值的矩阵df:

C,L,N
a,x,10
a,y,2
a,z,4
b,x,1
b,y,22
b,z,11
c,x,3
c,y,1
c,z,0
Run Code Online (Sandbox Code Playgroud)

到目前为止,它适用于:

# Read DataBase
df = pd.read_csv('myfile.csv')

# Save Users/City/Language Matrix
pdf = df.pivot(index='C',columns='L',values='N').fillna(0)

# Set Font Parameters
rc = {'font.size': 8, 'xtick.labelsize': 11, 'ytick.labelsize': 11}

# Set Figure
fig = plt.figure(figsize=(20, 9))

# Assign to Seaborn
sns.set(rc=rc)

with sns.axes_style('white'):

    sns.heatmap(pdf,
                cbar=False,
                square=False,
                annot=True,
                cmap='Blues',
                fmt='g',
                linewidths=0.5)
Run Code Online (Sandbox Code Playgroud)

哪个回报:

在此输入图像描述

最后,我有兴趣只保留值并将结构保存为一个简单的表格,丢弃颜色.我尝试设置cmap=None但它不起作用,没有cmap,seaborn为cmap热图分配默认值.

python pandas seaborn

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

将两列设置为 Pandas 数据框中的索引以进行时间序列分析

在天气或股票市场数据的情况下,温度和股票价格都是在任何给定日期的多个站点或股票行情中测量的。

因此,设置包含两个字段的索引的最有效方法是什么?

对于天气:weather_station 然后是 Date

对于股票数据:stock_code 然后是日期

以这种方式设置索引将允许过滤,例如:

  • stock_df["code"]["start_date":"end_date"]
  • weather_df["station"]["start_date":"end_date"]

python indexing time-series pandas

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

pandas - 将 UTM 函数应用于数据框列

我正在使用这个名为 UTM 的 python 包,它将 WGS84 坐标转换为 UTM,反之亦然。我想将此函数应用于 pandas 数据框。该函数的工作原理如下:

utm.from_latlon(51.2, 7.5)
>>> (395201.3103811303, 5673135.241182375, 32, 'U')
Run Code Online (Sandbox Code Playgroud)

其中输入是几个坐标,它返回 UTM 系统中相同坐标的元组。出于我的目的,我只对元组的前两个元素感兴趣。

我正在开发一个名为的数据框cities

City;Latitude;Longitude;minx;maxx;miny;maxy
Roma;41.892916;12.48252;11.27447419;13.69056581;40.99359439;42.79223761
Paris;48.856614;2.352222;0.985506011;3.718937989;47.95729239;49.75593561
Barcelona;41.385064;2.173403;0.974836927;3.371969073;40.48574239;42.28438561
Berlin;52.519171;13.406091;11.92835553;14.88382647;51.61984939;53.41849261
Moscow;55.755826;37.6173;36.01941671;39.21518329;54.85650439;56.65514761
Run Code Online (Sandbox Code Playgroud)

我想为每行添加四列,称为 'utmminx'、'utmmax'、'utmminy'、'utmmaxy' 作为将 utm 函数应用于 'minx'、'maxx'、'miny'、' 的结果maxy' 列。到目前为止,我尝试了以下操作,将结果元组的第一个和第二个值分配给新列:

cities['utmminx'],cities['utmmaxx'] = utm.from_latlon(cities['minx'],cities['maxx'])[0],utm.from_latlon(cities['minx'],cities['maxx'])[1]
Run Code Online (Sandbox Code Playgroud)

但我收到了一条消息,ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().我尝试仅将第一行值设置为函数,并且它有效:

utm.from_latlon(cities['minx'][0],cities['maxx'][0])[0],utm.from_latlon(cities['minx'][0],cities['maxx'][0])[1]
>>> (357074.7837193568, 1246647.7959235134)
Run Code Online (Sandbox Code Playgroud)

我想避免数据帧上的经典循环,因为我认为有一个经典的 pandas 方法可以做到这一点。

python utm pandas

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

Python divmod为pandas Dataframe中的每个值

我有一个像这样的pandas数据框:

   P-101  P-103  P-104  P-107  P-114  P-120
P   2415   2535   3345   5650   2805   6210
S      0     45   3105   1165      0      0
D      0    690    690    570    255    830
Run Code Online (Sandbox Code Playgroud)

我想对divmod(value, 60)每个单元格应用a ,然后将结果格式化为[quotient]h[remainder]m,如下所示:5h30m

我试过了:

df.values.apply(lambda x: divmod(x,60))
Run Code Online (Sandbox Code Playgroud)

但那抛出了一个 AttributeError

我如何申请divmod每一个价值?

python python-2.7 pandas divmod

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

如何使用我的Pandas数据框创建显示组值sum()的数据透视表?

我的df1:

               cnpj     num_doc    bc_icms
0    02817342000124  0000010154   17827.07
1    54921580000189  0000112428  108000.00
2    08953538000122  0000012865     232.00
3    08953538000122  0000012865     239.00
4    08953538000122  0000012865     215.00
5    07374346000107  0000014224     320.12
6    07374346000107  0000014231     385.04
7    07374346000107  0000014263     401.28
8    07374346000107  0000014279     391.26
9    02364118000124  0000015263   37353.10
10   02364118000124  0000015264   56214.14
Run Code Online (Sandbox Code Playgroud)

输出df1.dtypes:

cnpj        object
num_doc     object
bc_icms    float64
dtype: object
Run Code Online (Sandbox Code Playgroud)

所以....我正在尝试创建一个数据透视表来回答以下问题:

什么是sumbc_icms每一个cnpj

这就是我写的:

indexes = [np.array(df1['cnpj']), np.array(df1['num_doc'])]
pt1 = pd.DataFrame(df1['bc_icms'], index=indexes)
print pt1 …
Run Code Online (Sandbox Code Playgroud)

python pivot-table pandas

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

在pandas数据帧中舍入一列

我有一个df像这样的pandas数据框:

          no_obs  price_cleaning  house_size
0         1             585          30
1         1             585          40
2         1             585          43
3         1             650          43
4         1             633          44
5         1             650          45
6         2             585          50
7         1             633          50
8         1             650          50
9         2             750          50 
Run Code Online (Sandbox Code Playgroud)

我想price_cleaning用这个函数对列中的值进行舍入:

def roundup(x): return int(math.ceil(x / 10.0)) * 10

我已经尝试了这个答案的解决方案(按功能将功能应用于Pandas数据帧):

cols = [col for col in df.columns if col != 'price_cleaning'] df[cols] = df[cols].apply(roundup)

我收到以下错误:TypeError :("无法将系列转换为",'发生在索引no_obs')

任何人都可以帮助我理解为什么这不起作用?如何将舍入功能应用于列?任何帮助深表感谢.

python python-3.x pandas python-3.5

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

转换为 csv 时仅从 xls 的第一行删除 \n 字符 Python pandas

Excel 的第一行包含每个单元格中带有 \n 字符的单词。例如:

月份 “中东北部\n(NSA)” “中东北部\n(SA)” “中东南部\n(NSA)”

因此,在使用以下代码转换为 csv 时:

data_xls = pd.read_excel('/home/scripts/usless/HP_PO_hist.xls', 'sheet1', index_col=4,skiprows=3)
data_xls.to_csv('HH_PO_output.csv', encoding='utf-8')
Run Code Online (Sandbox Code Playgroud)

它将 \n 之后的字符转换为新行,例如:

,月,“中东北部
(国家安全局)”,“中东北部
(SA)","中东南部
(美国国家安全局)”,“中东南部

但预期的输出是这样的:

月份 中东北部 (NSA) 中东北部 (SA) 中东南部 (NSA) 中东南部 (SA)

在 Python df 中转换为 csv 时,如何仅从此索引行中删除此 \n 字符?

python csv excel dataframe pandas

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

麻烦在Pandas中传递基本功能

我有一个非常基本的函数,它取一个字符串的前六个字母.我想将它应用于我的DataFrame中的列.

码:

import re
import pandas as pd
import numpy as np
dfp = pd.DataFrame({'A' : [np.NaN,np.NaN,3,4,5,5,3,1,5,np.NaN], 
                    'B' : [1,0,3,5,0,0,np.NaN,9,0,0], 
                    'C' : ['AA1233445','A9875', 'rmacy','Idaho Rx','Ab123455','TV192837','RX','Ohio Drugs','RX12345','USA Pharma'], 
                    'D' : [123456,123456,1234567,12345678,12345,12345,12345678,123456789,1234567,np.NaN],
                    'E' : ['Assign','Unassign','Assign','Ugly','Appreciate','Undo','Assign','Unicycle','Assign','Unicorn',]})
def six_dig(thing):
    return str(thing)[:6]

dfp6= dfp[dfp['C'].apply(six_dig, axis=1)]
Run Code Online (Sandbox Code Playgroud)

但我得到:TypeError: six_dig() got an unexpected keyword argument 'axis' 我甚至尝试使用.map()但得到同样的错误.

如果我删除axis=1我得到:KeyError: ["STUFF"] not in index

我必须遗漏一些非常简单的东西,因为我之前在DataFrame列上使用了函数...

python apply dataframe pandas

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