[英]Convert CSV row date record of type string into unixstamp and load into json - Python
我正在尝试将日期从我的 csv 转换为 Unix 戳并加载到 json
"bFlag","date"
"TRUE", "10/8/2022"
"FALSE","11/8/2022"
所需的 output:
{
{
bFlag: True
date : 1660082400000
},
{
bFlag: False
date : 1660168800000
}
}
我的代码,
import csv
import json
import time
import datetime
#### Transforming Date String into Unix Timestamp ###
def transform_date(ts):
return time.mktime(datetime.datetime.strptime(ts, "%d/%m/%Y").timetuple()) * 1000
def csv_to_json(csvFilePath, jsonFilePath):
jsonArray = []
# read csv file
with open(csvFilePath, encoding='utf-8') as csvf:
###### Transforming True and False strings into Boolean values
csvReader = [[True if row[field] == 'TRUE' else
False if row[field] == 'FALSE' else
row[field] for field in row] for row in csv.DictReader(csvf)]
for row in csvReader:
# adding python dict to json array
transRow = transform_row(row)
jsonArray.append(transRow)
with open(jsonFilePath, 'w', encoding='utf-8') as jsonf:
jsonString = json.dumps(jsonArray, indent=4)
jsonf.write(jsonString)
从 csv 读取数据并将日期字符串转换为时间戳并将其添加到字典之前,我想使用 transform_date(ts) function 。
任何建议如何使用它,可能吗?
我推荐使用 Pandas 库,它非常健壮,可能是使用 python 操作数据的首选方式。 下面我们简单地从字典中生成数据框。 您可以在注释代码中看到如何使用 pd.read_csv 读取pd.read_csv
。
import pandas as pd
df = pd.DataFrame({
'bflag':[True, False],
'date':['10/8/2022', '11/8/2022']
})
# or from file
# df = pd.read_csv("path/to/file")
df['timestamp'] = df['date'].apply(lambda x : pd.Timestamp(x).timestamp())
df.head()
function pd.Timestamp() 由 pandas 提供。 我们将 lambda function “应用”到“日期”系列的每一行。 The lambda function converts string to a timestamp object, and returns the.timestamp() value of that object to be saved in a new series called timestamp.
这是 output
bflag date timestamp
0 True 10/8/2022 1.665187e+09
1 False 11/8/2022 1.667866e+09
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Timestamp.timestamp.html
现在对于 Json,您想要的 output 看起来无效,因为您的 dicts 不在列表中或者它们没有密钥。 您可以使用 pandas 生成有效的 json,每个 dict 都有一个密钥。
https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.to_json.html
您可以将 path_or_buf 参数添加到 to_json 以写入文件而不是字符串。
print(df[['bflag', 'timestamp']].to_json(orient='index'))
# prints {"0":{"bflag":true,"timestamp":1665187200.0},"1":{"bflag":false,"timestamp":1667865600.0}}
我认为使用 pandas 很容易完成你正在尝试的事情。 转换为时间戳是 answert here 。
# Input:
df = pd.read_table(
StringIO("""bFlag date
TRUE 10/8/2022
FALSE 11/8/2022"""), parse_dates=['date'])
# you read your input from csv file, you want to do something like this:
# df = pd.read_csv(csvfilepath, parse_dates=['date'])
# converting datetime to timestamp
df['date'] = df['date'].values.astype(np.int64) // 10 ** 9
print(df)
Output df
:
bFlag date
0 TRUE 1665187200
1 FALSE 1667865600
然后使用带有records
方向的to_json
将您的df
转换为 json(请参阅有关构建 json 数据的不同方式的文档)
res = df.to_json(orient='records')
print(res)
Output:
[
{
"bFlag ": "TRUE ",
"date": 1665187200
},
{
"bFlag ": "FALSE ",
"date": 1667865600
}
]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.