我有一个如下所示的数据框:
case inc_date is1 is5 is10 im1 im5 im10
686 6/8/1972 0.141 0.300 0.149 0.134 0.135 0.142
950 6/1/1945 0.160 0.345 0.172 0.088 0.096 0.138
1005 10/16/1945 0.164 0.261 0.151 0.131 0.261 0.133
1005 11/12/1947 0.146 0.310 0.182 0.112 0.129 0.121
1180 10/9/1945 0.159 0.278 0.134 0.141 0.138 0.150
Run Code Online (Sandbox Code Playgroud)
我想找出每行中的最大值并返回值最大的列名。例如,对于上面的数据框,它将返回:
686 is5
950 is5
1005 is5, im5
1005 is5
1180 is5
Run Code Online (Sandbox Code Playgroud) import pandas as pd
import numpy as np
rates=(pd.read_excel("C:\Anaconda3\RateMatrix.xlsx", sheetname="Pu239Test", skiprows=0)).as_matrix() #read the matrix values from excel spreadsheet, and converts the values to a matrix
Run Code Online (Sandbox Code Playgroud)
rates 是一个 22 x 22 矩阵。
我想用该行中所有其他元素的总和替换费率矩阵的对角元素。
例如,
rates.item(0,0) = rates.item(0,1)+rates.item(0,2)+rates.item(0,3)+....rates.item(0,21)
利率.项目(1,1) = 利率.项目(1,0)+利率.项目(1,2)+利率.项目(1,3)+....利率.项目(1,21)
……
rates.item(21,21) = rates.item(21,0)+rates.item(21,2)+rates.item(21,3)+....rates.item(21,20)
我想知道我怎样才能做到这一点。预先非常感谢。
我正在阅读一个> 10,000行的文本文件.
results_file = open("Region_11_1_micron_o", 'r')
Run Code Online (Sandbox Code Playgroud)
我想在特定字符串"chart"之后跳转到文件中的行,该字符串出现在第no行附近.7000(不同文件不同).有没有办法方便地做到这一点,而无需阅读文件的每一行?
model_names = ['is1', 'is5', 'is10', 'im1', 'im5', 'im10']
Run Code Online (Sandbox Code Playgroud)
举个例子,
models = [0.1, 0.2, 0.1, 0.3, 0.2, 0.3]
Run Code Online (Sandbox Code Playgroud)
列表的最大值为0.3,对应于型号名称'im1'和'im10'.我喜欢这个功能
dominant_model(models)
Run Code Online (Sandbox Code Playgroud)
回来
['im1', 'im10']
Run Code Online (Sandbox Code Playgroud)
即,最"主导"的模型.
这是我的代码,它完成了这项工作,但我想知道是否有更短的方法来做同样的事情,而不是所有的条件:
def dominant_model(models):
m = max(models)
dom_models = [i for i,j in enumerate(models) if j==m]
for i in range(len(dom_models)):
if dom_models[i]==0:
dom_models[i]=model_names[0]
elif dom_models[i]==1:
dom_models[i]=model_names[1]
elif dom_models[i]==2:
dom_models[i]=model_names[2]
elif dom_models[i]==3:
dom_models[i]=model_names[3]
elif dom_models[i]==4:
dom_models[i]=model_names[4]
elif dom_models[i]==5:
dom_models[i]=model_names[5]
return dom_models
Run Code Online (Sandbox Code Playgroud) df = pd.DataFrame({'Tissues':['a1','x2','y3','b','c1','v2','w3'], 'M':[1,2,'a',4,'b','a',7]})
df.set_index('Tissues')
Run Code Online (Sandbox Code Playgroud)
数据框看起来像:
M
Tissues
a1 1
x2 2
y3 a
b 4
c1 b
v2 a
w3 7
Run Code Online (Sandbox Code Playgroud)
如何将a列中的所有s替换M为特定值,2 以及所有bs 到 3?
我试过:
replace_values = {'a':2, 'b':3}
df['M'] = df['M'].map(replace_values)
Run Code Online (Sandbox Code Playgroud)
,但这将不在键中的其他值更改replace_values为NaN:
Tissues M
0 a1 NaN
1 x2 NaN
2 y3 2.0
3 b NaN
4 c1 3.0
5 v2 2.0
6 w3 NaN
Run Code Online (Sandbox Code Playgroud)
我明白我可以做到
df.loc[(df['M'] == 'a')] = 2
Run Code Online (Sandbox Code Playgroud)
但是我可以对 a、b 等有效地执行此操作,而不是一个一个地执行此操作吗?
import csv
with open("C:\Anaconda3\FalkParameters\AllModels.csv","r") as f:
reader = csv.reader(f)
listofModels = list(reader)
Run Code Online (Sandbox Code Playgroud)
AllModels是一个巨大的csv文件(2.4 GB).我不确定那里有多少行,因为我无法用任何应用程序打开它(记事本,记事本++,excel等).
上面的代码运行正常,但如果我尝试打印"listofModels",控制台开始打印,但在某些时候我得到一个"ValueError:关闭文件的I/O操作".每次打印在不同的行停止.
我想知道是否有办法在python中处理巨大的csv文件.