将CSV文件中的字符串转换为浮点数并将它们存储为列表?

huangapple go评论96阅读模式
英文:

how to transform strings in csv file into float and store them as a list?

问题

我有一个看起来像这样的CSV文件:

  1. id,type,inc,a,b
  2. 1,2,63376.799999999996,0.3061,187
  3. 2,1,58087.700000000004,0.3361,178
  4. 3,1,52699.9,0.3482,181
  5. 4,2,72964.8,0.3186,177
  6. 5,4,111589.79999999999,0.268,154
  7. 6,4,107618.0,0.2583,150
  8. 7,2,87109.2,0.3233,193
  9. 8,2,84669.59999999999,0.308,179
  10. 9,2,77258.4,0.3247,173

我需要将字段[3]、[4]和[5]中的值,即'inc'、'a'和'b',转换为浮点数,然后追加到households以创建一个列表。

最后,它应该打印len(households)。

我正在尝试这样做:

  1. import csv
  2. import scipy.optimize as opt
  3. def read_households(filename):
  4. households=[]
  5. fh = open("households.csv", 'r')
  6. reader = csv.DictReader(fh) #创建一个用于读取文件的'reader'对象
  7. for hh in reader:
  8. reader[3,4,5] = float(reader[3,4,5])
  9. households.append(hh)
  10. print("lines read:", len(households))
  11. return(household)

它没有给我任何输出。

英文:

I have csv file that looks like this:

  1. id,type,inc,a,b
  2. 1,2,63376.799999999996,0.3061,187
  3. 2,1,58087.700000000004,0.3361,178
  4. 3,1,52699.9,0.3482,181
  5. 4,2,72964.8,0.3186,177
  6. 5,4,111589.79999999999,0.268,154
  7. 6,4,107618.0,0.2583,150
  8. 7,2,87109.2,0.3233,193
  9. 8,2,84669.59999999999,0.308,179
  10. 9,2,77258.4,0.3247,173

I need to transform values from fields [3], [4] and [5] that are 'inc', 'a' and 'b' into float and than append to households to create a list.

Finally it should print len(households)

I am trying this

  1. import csv
  2. import scipy.optimize as opt
  3. def read_households(filename):
  4. households=[]
  5. fh = open("households.csv", 'r')
  6. reader = csv.DictReader(fh) #creates object 'reader' to read the file
  7. for hh in reader:
  8. reader[3,4,5] = float(reader[3,4,5])
  9. households.append(hh)
  10. print("lines read:", len(households))
  11. return(household)

It does not give me anything.

答案1

得分: 0

尝试使用以下代码从CSV文件中获取一些输出:

  1. import csv
  2. import scipy.optimize as opt
  3. def read_households(filename):
  4. households = []
  5. fh = open(filename, 'r')
  6. reader = csv.DictReader(fh)
  7. for hh in reader:
  8. hh['inc'] = float(hh['inc'])
  9. hh['a'] = float(hh['a'])
  10. hh['b'] = float(hh['b'])
  11. households.append(hh)
  12. print("读取行数:", len(households))
  13. return households
  14. # 调用函数
  15. read_households('csv文件的路径')

结果:

  1. 读取行数: 9
  2. [{'id': '1', 'type': '2', 'inc': 63376.8, 'a': 0.3061, 'b': 187.0},
  3. {'id': '2', 'type': '1', 'inc': 58087.7, 'a': 0.3361, 'b': 178.0},
  4. {'id': '3', 'type': '1', 'inc': 52699.9, 'a': 0.3482, 'b': 181.0},
  5. {'id': '4', 'type': '2', 'inc': 72964.8, 'a': 0.3186, 'b': 177.0},
  6. {'id': '5', 'type': '4', 'inc': 111589.8, 'a': 0.268, 'b': 154.0},
  7. {'id': '6', 'type': '4', 'inc': 107618.0, 'a': 0.2583, 'b': 150.0},
  8. {'id': '7', 'type': '2', 'inc': 87109.2, 'a': 0.3233, 'b': 193.0},
  9. {'id': '8', 'type': '2', 'inc': 84669.6, 'a': 0.308, 'b': 179.0},
  10. {'id': '9', 'type': '2', 'inc': 77258.4, 'a': 0.3247, 'b': 173.0}]
英文:

Try this code for get some output from CSV.

  1. import csv
  2. import scipy.optimize as opt
  3. def read_households(filename):
  4. households=[]
  5. fh = open(filename, 'r')
  6. reader = csv.DictReader(fh)
  7. for hh in reader:
  8. hh['inc'] = float(hh['inc'])
  9. hh['a'] = float(hh['a'])
  10. hh['b'] = float(hh['b'])
  11. households.append(hh)
  12. print("lines read:", len(households))
  13. return households
  14. # call function
  15. read_households('path_of_csv_file')

Result :

  1. lines read: 9
  2. [{'id': '1', 'type': '2', 'inc': 63376.799999999996, 'a': 0.3061, 'b': 187.0},
  3. {'id': '2', 'type': '1', 'inc': 58087.700000000004, 'a': 0.3361, 'b': 178.0},
  4. {'id': '3', 'type': '1', 'inc': 52699.9, 'a': 0.3482, 'b': 181.0},
  5. {'id': '4', 'type': '2', 'inc': 72964.8, 'a': 0.3186, 'b': 177.0},
  6. {'id': '5', 'type': '4', 'inc': 111589.79999999999, 'a': 0.268, 'b': 154.0},
  7. {'id': '6', 'type': '4', 'inc': 107618.0, 'a': 0.2583, 'b': 150.0},
  8. {'id': '7', 'type': '2', 'inc': 87109.2, 'a': 0.3233, 'b': 193.0},
  9. {'id': '8', 'type': '2', 'inc': 84669.59999999999, 'a': 0.308, 'b': 179.0},
  10. {'id': '9', 'type': '2', 'inc': 77258.4, 'a': 0.3247, 'b': 173.0}]

答案2

得分: 0

  1. 如果你能使用`pandas`那么这是一个非常简单的方法
  2. ```python
  3. import pandas as pd
  4. df = pd.read_csv('file.csv')
  5. df = df.astype({'inc': 'float', 'a': 'float', 'b': 'float'})
  6. print(df)
  7. print(f"Lines read: {df.shape[0]}")

运行后得到:

  1. id type inc a b
  2. 0 1 2 63376.8 0.3061 187.0
  3. 1 2 1 58087.7 0.3361 178.0
  4. 2 3 1 52699.9 0.3482 181.0
  5. ...
  6. 8 9 2 77258.4 0.3247 173.0
  7. Lines read: 9

如果你需要将输出转换为字典列表:

  1. households = df.to_dict('records')

这样就完成了

  1. <details>
  2. <summary>英文:</summary>
  3. If you can use `pandas` then this is a very easy way:

import pandas as pd

df = pd.read_csv('file.csv')
df = df.astype({'inc': 'float', 'a': 'float', 'b': 'float'})
print(df)

print(f"Lines read: {df.shape[0]}")

  1. When run gives:

id type inc a b
0 1 2 63376.8 0.3061 187.0
1 2 1 58087.7 0.3361 178.0
2 3 1 52699.9 0.3482 181.0
...
8 9 2 77258.4 0.3247 173.0
Lines read: 9

  1. If you need the output in the list of dictionaries output:

households = df.to_dict('records')

  1. and we are done
  2. </details>

huangapple
  • 本文由 发表于 2023年2月10日 12:34:49
  • 转载请务必保留本文链接:https://go.coder-hub.com/75406986.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定