我不知道是否有导入CSV文件的内容为记录阵列直接的方式,很多的方式是R的read.table()
,read.delim()
和read.csv()
家庭的进口数据与R的数据帧?
或者是使用csv.reader()然后应用类似的东西的最佳方法numpy.core.records.fromrecords()
?
我的运行genfromtxt
方式如下:
date_conv = lambda x: str(x).replace(":", "/")
time_conv = lambda x: str(x)
a = np.genfromtxt(input.txt, delimiter=',', skip_header=4,
usecols=[0, 1] + radii_indices, converters={0: date_conv, 1: time_conv})
Run Code Online (Sandbox Code Playgroud)
这个要点input.txt
来自哪里.
当我查看结果时,它是一维数组而不是二维数组:
>>> np.shape(a)
(918,)
Run Code Online (Sandbox Code Playgroud)
它似乎是一组元组:
>>> a[0]
('06/03/2006', '08:27:23', 6.4e-05, 0.000336, 0.001168, 0.002716, 0.004274, 0.004658, 0.003756, 0.002697, 0.002257, 0.002566, 0.003522, 0.004471, 0.00492, 0.005602, 0.006956, 0.008442, 0.008784, 0.006976, 0.003917, 0.001494, 0.000379, 6.4e-05)
Run Code Online (Sandbox Code Playgroud)
如果我从genfromtxt
调用中删除转换器规范,它可以正常工作并生成一个2D数组:
>>> np.shape(a)
(918, 24)
Run Code Online (Sandbox Code Playgroud) 我试图读取一个csv文件,numpy.genfromtxt
但有些字段是包含逗号的字符串.字符串是引号,但是numpy没有将引号识别为定义单个字符串.例如,使用't.csv'中的数据:
2012, "Louisville KY", 3.5
2011, "Lexington, KY", 4.0
Run Code Online (Sandbox Code Playgroud)
代码
np.genfromtxt('t.csv', delimiter=',')
Run Code Online (Sandbox Code Playgroud)
产生错误:
ValueError:检测到一些错误!第2行(有4列而不是3列)
我正在寻找的数据结构是:
array([['2012', 'Louisville KY', '3.5'],
['2011', 'Lexington, KY', '4.0']],
dtype='|S13')
Run Code Online (Sandbox Code Playgroud)
查看文档,我没有看到任何处理此问题的选项.有没有办法用numpy做,或者我只需要用csv
模块读取数据然后将其转换为numpy数组?
我正在尝试使用numpy中的genfromtxt导入包含文本和数字的大型.csv文件.我只对两列感兴趣.我将大部分导入整理出来:
def importfile(root):
data = root.entry.get()
atw = np.genfromtxt(data, delimiter=",",
skip_header=1,
skip_footer=2,
autostrip=True,
usecols=(25,26),
dtype=("|S10"))
elem = atw[:,0]
concs = atw[:,1]
print(elem)
print(concs)
Run Code Online (Sandbox Code Playgroud)
分别输出elem和concs:
['Na2O' 'MgO' 'Al2O3' 'SiO2' 'P2O5' 'SO3' 'Cl' 'K2O' 'CaO' 'TiO2' 'Cr2O3'
'MnO' 'FeO' 'NiO' 'Cu2O' 'ZnO' 'Ga2O3' 'SrO' 'Y2O3']
['3.76E+00' '1.31E+01' '1.14E+01' '4.04E+01' '1.24E+00' '5.89E-02'
'2.43E-02' '1.53E+00' '1.49E+01' '2.87E+00' '6.05E-02' '1.96E-01'
'1.17E+01' '3.69E-02' '8.73E-03' '1.39E-02' '1.93E-03' '1.88E-01'
'5.58E-03']
Run Code Online (Sandbox Code Playgroud)
我已经尝试了许多不同的东西,用于将concs字符串转换为float,但它似乎不喜欢concs是科学记数法的事实....是否存在将concs值转换为float的方法?在此先感谢您的支持.
我有一个包含一些元数据的文件,然后是一些由2列标题组成的实际数据.在numpy中使用genfromtxt之前,我是否需要分离这两种类型的数据?或者我可以以某种方式拆分数据吗?将文件指针放在标题上方的行尾,然后从那里尝试genfromtxt怎么样?谢谢文件的格式如下所示:
&SRS
<MetaDataAtStart>
multiple=True
Wavelength (Angstrom)=0.97587
mode=assessment
background=True
issid=py11n2g
noisy=True
</MetaDataAtStart>
&END
Two Theta(deg) Counts(sec^-1)
10.0 41.0
10.1 39.0
10.2 38.0
10.3 38.0
10.4 41.0
10.5 42.0
10.6 38.0
10.7 44.0
10.8 42.0
10.9 39.0
11.0 37.0
11.1 37.0
11.2 45.0
11.3 36.0
11.4 37.0
11.5 37.0
11.6 40.0
11.7 44.0
11.8 45.0
11.9 46.0
12.0 44.0
12.1 40.0
12.2 41.0
12.3 39.0
12.4 41.0
Run Code Online (Sandbox Code Playgroud) 我想在标准的ascii csv文件中读入numpy,它由浮点数和字符串组成.
例如,
ZINC00043096,C.3,C1,-0.1540,methyl
ZINC00043096,C.3,C2,0.0638,methylene
ZINC00043096,C.3,C4,0.0669,methylene
ZINC00090377,C.3,C7,0.2070,methylene
...
Run Code Online (Sandbox Code Playgroud)
无论我尝试什么,结果阵列看起来都像
例如,
all_data = np.genfromtxt(csv_file, dtype=None, delimiter=',')
[(b'ZINC00043096', b'C.3', b'C1', -0.154, b'methyl')
(b'ZINC00043096', b'C.3', b'C2', 0.0638, b'methylene')
(b'ZINC00043096', b'C.3', b'C4', 0.0669, b'methylene')
Run Code Online (Sandbox Code Playgroud)
但是,我想保存字节字符串转换的步骤,并想知道如何直接在字符串列中读取常规字符串.
我尝试了numpy.genfromtxt()文档中的几个东西,例如,dtype='S,S,S,f,S'
或者dtype='a25,a25,a25,f,a25'
,但是这里没有任何帮助.
我很害怕,但我想我只是不明白dtype转换是如何工作的......如果你能在这里给我一些暗示会很好!
谢谢
我正在研究以下代码,用于在火车和测试集上执行随机森林分类;
from sklearn.ensemble import RandomForestClassifier
from numpy import genfromtxt, savetxt
def main():
dataset = genfromtxt(open('filepath','r'), delimiter=' ', dtype='f8')
target = [x[0] for x in dataset]
train = [x[1:] for x in dataset]
test = genfromtxt(open('filepath','r'), delimiter=' ', dtype='f8')
rf = RandomForestClassifier(n_estimators=100)
rf.fit(train, target)
predicted_probs = [[index + 1, x[1]] for index, x in enumerate(rf.predict_proba(test))]
savetxt('filepath', predicted_probs, delimiter=',', fmt='%d,%f',
header='Id,PredictedProbability', comments = '')
if __name__=="__main__":
main()
Run Code Online (Sandbox Code Playgroud)
但是我在执行时遇到以下错误;
----> dataset = genfromtxt(open('C:/Users/Saurabh/Desktop/pgm/Cora/a_train.csv','r'), delimiter='', dtype='f8')
ValueError: Some errors were detected !
Line #88 …
Run Code Online (Sandbox Code Playgroud) 我希望这不是微不足道的,但我想知道以下内容:
如果我有一个包含n个 csv
文件的特定文件夹,我怎么能一次一个地迭代读取所有文件,并对它们的值执行一些计算?
例如,对于单个文件,我执行类似的操作并对x
数组执行一些计算:
import csv
import os
directoryPath=raw_input('Directory path for native csv file: ')
csvfile = numpy.genfromtxt(directoryPath, delimiter=",")
x=csvfile[:,2] #Creates the array that will undergo a set of calculations
Run Code Online (Sandbox Code Playgroud)
我知道我可以检查csv
给定文件夹中有多少文件(请点击此处):
import glob
for files in glob.glob("*.csv"):
print files
Run Code Online (Sandbox Code Playgroud)
但是我没有弄清楚如何将numpy.genfromtxt()
函数嵌套在for循环中,所以我读入了一个目录的所有csv文件,由我来指定.
编辑
我只有的文件夹jpg
和csv
文件.后者是命名的eventX.csv
,其中X的范围是1到50.因此,for
我所指的循环应该按照它们的方式考虑文件名.
我正在尝试处理保存到CSV的数据,这些数据可能在未知数量的列中丢失了值(最多约30个).我试图使用genfromtxt
's filling_missing
参数将这些缺失值设置为'0' .这是在Win 7上运行ActiveState ActivePython 2.7 32位的numpy 1.6.2的最小工作示例.
import numpy
text = "a,b,c,d\n1,2,3,4\n5,,7,8"
a = numpy.genfromtxt('test.txt',delimiter=',',names=True)
b = open('test.txt','w')
b.write(text)
b.close()
a = numpy.genfromtxt('test.txt',delimiter=',',names=True)
print "plain",a
a = numpy.genfromtxt('test.txt',delimiter=',',names=True,filling_values=0)
print "filling_values=0",a
a = numpy.genfromtxt('test.txt',delimiter=',',names=True,filling_values={1:0})
print "filling_values={1:0}",a
a = numpy.genfromtxt('test.txt',delimiter=',',names=True,filling_values={0:0})
print "filling_values={0:0}",a
a = numpy.genfromtxt('test.txt',delimiter=',',names=True,filling_values={None:0})
print "filling_values={None:0}",a
Run Code Online (Sandbox Code Playgroud)
结果如下:
plain [(1.0, 2.0, 3.0, 4.0) (5.0, nan, 7.0, 8.0)]
filling_values=0 [(1.0, 2.0, 3.0, 4.0) (5.0, nan, 7.0, 8.0)]
filling_values={1:0} [(1.0, 2.0, 3.0, 4.0) (5.0, 0.0, 7.0, 8.0)]
filling_values={0:0} [(1.0, 2.0, …
Run Code Online (Sandbox Code Playgroud) 在阅读CSV文件时,我遇到了NumPy 1.10.2的以下问题.我无法弄清楚如何给出明确的数据类型genfromtxt
.
下面是CSV, minimal.csv
:
x,y
1,hello
2,hello
3,jello
4,jelly
5,belly
Run Code Online (Sandbox Code Playgroud)
在这里,我尝试用genfromtxt阅读它:
import numpy
numpy.genfromtxt('minimal.csv', dtype=(int, str))
Run Code Online (Sandbox Code Playgroud)
我也尝试过:
import numpy
numpy.genfromtxt('minimal.csv', names=True, dtype=(int, str))
Run Code Online (Sandbox Code Playgroud)
无论如何,我得到错误:
Traceback (most recent call last):
File "visualize_numpy.py", line 39, in <module>
numpy.genfromtxt('minimal.csv', dtype=(int, str))
File "/Users/xeli/workspace/myproj/env/lib/python3.5/site-packages/numpy/lib/npyio.py", line 1518, in genfromtxt
replace_space=replace_space)
File "/Users/xeli/workspace/myproj/env/lib/python3.5/site-packages/numpy/lib/_iotools.py", line 881, in easy_dtype
ndtype = np.dtype(ndtype)
ValueError: mismatch in size of old and new data-descriptor
Run Code Online (Sandbox Code Playgroud)
或者,我试过:
import numpy
numpy.genfromtxt('minimal.csv', dtype=[('x', int), ('y', str)])
Run Code Online (Sandbox Code Playgroud)
哪个投掷:
Traceback (most recent …
Run Code Online (Sandbox Code Playgroud)