小编pra*_*har的帖子

如何在Python中将表示为字符的数字转换为数字

我的数据框中有一个列,其值为'3.456B',实际上代表了3.456亿(和Million相似的表示法).如何将此字符串形式转换为正确的数字表示?

这显示了数据框:

import pandas as pd
data_csv = pd.read_csv('https://biz.yahoo.com/p/csv/422conameu.csv')
data_csv
Run Code Online (Sandbox Code Playgroud)

这是一个示例值:

data_csv['Market Cap'][0]
type(data_csv['Market Cap'][0])
Run Code Online (Sandbox Code Playgroud)

我试过这个:

data_csv.loc[data_csv['Market Cap'].str.contains('B'), 'Market Cap'] = data_csv['Market Cap'].str.replace('B', '').astype(float).fillna(0.0)
data_csv
Run Code Online (Sandbox Code Playgroud)

但不幸的是,最后还有值为'M'的值,表示百万.它返回错误如下:

ValueError: invalid literal for float(): 6.46M
Run Code Online (Sandbox Code Playgroud)

如何在此列中用适当的值替换B和M?有没有更好的方法呢?

python replace pandas

8
推荐指数
2
解决办法
949
查看次数

使用函数根据列满足的条件在 Pandas 中创建新列

我在熊猫数据框中有几列。基于每一列,我需要创建一个新列。此功能有效:

def f(row):
    if row['col_1'] == 0:
        val = 'Neutral'
    elif row['col_1'] > 0:
        val = 'Growth'
    else:
        val = 'Contraction'
    return val

df['New_Col_1'] = df.apply(f(row) , axis=1)
Run Code Online (Sandbox Code Playgroud)

但是由于我有几个要比较的列(col_2、col_3 等),我想将列的名称作为函数中的参数传递。

def f(row,col_name):
    if row[col_name] == 0:
        val = 'Neutral'
    elif row[col_name] > 0:
        val = 'Growth'
    else:
        val = 'Contraction'
    return val

df['New_Col_1'] = df.apply(f(row,'col_1') , axis=1)
Run Code Online (Sandbox Code Playgroud)

但是,有一个错误。它说未定义参数“行”。我如何克服这个问题?

python dataframe python-2.7 pandas

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

使用 python 从电子表格中提取最后一行值 - 遇到“NoneType”

我正在使用 openpyxl 提取 Excel 电子表格的最后一行:

import openpyxl 
wb = openpyxl.load_workbook('Folder/File.xlsx')
sheet = wb.active
last_row = sheet.max_row
Run Code Online (Sandbox Code Playgroud)

这返回了 44 sheet.max_row。但电子表格的最后几行没有任何值,它们是空白的。

type(sheet['A44'].value)返回NoneType。

我想提取最后一行(本例中为第 37 行)中的值并将其附加到 Pandas 数据框中。如何忽略NoneType电子表格最后一行中的值?

python excel openpyxl

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

标签 统计

python ×3

pandas ×2

dataframe ×1

excel ×1

openpyxl ×1

python-2.7 ×1

replace ×1