我正在尝试将 Spark DataFrame 转换为 Pandas。但是,它给出以下错误:
OutOfBoundsDatetime: Out of bounds nanosecond timestamp:
有解决办法吗?
如果我删除所有时间戳列,它会起作用,但我想将整个表放入 Pandas 中。
将 Spark DataFrame 引入 Pandas 时,我从未遇到过错误。
这是一个相当大的表,包含多个时间戳列。有些是YYYY-MM-DD,有些是YYYY-MM-DD 00:00:00类型列。
有多个列包含不存在的年份变量,数量未知。
下面是一个例子。
data = {
"ID": ["AB", "CD", "DE", "EF"],
"year": [2016, 2017, 2018, 2018],
"time_var_1": [
"3924-01-04 00:00:00",
"4004-12-12 12:38:00",
"2018-10-02 01:32:23",
"2018-04-05 00:00:00",
],
}
df = pd.DataFrame(data)
sdf = spark.createDataFrame(df)
sdf = sdf.withColumn("time_var_1", spark_fns.to_timestamp(spark_fns.col("time_var_1")))
Run Code Online (Sandbox Code Playgroud)
我对 PySpark 不太熟悉,所以我不确定errors='coerce'将表从 Spark DataFrame 导入 Pandas 时是否有等效的方法。
这是一个简单的问题(我认为),但我不确定回答它的最佳方法。
我需要根据 Spark Dataframe 中包含字符串的列中是否存在“子字符串”进行过滤。
目前我正在执行以下操作(使用过滤.contains):
data = [[1, "ABC"], [2, "DEF"], [3, "DEF"], [4, "JFKLMN"], [5, "JFKOPQ"], [6, "MNO"]]
df = pd.DataFrame(data, columns=["Item", "String"])
sdf = spark.createDataFrame(df)
Run Code Online (Sandbox Code Playgroud)
但我想概括这一点,以便我可以过滤到一个或多个字符串,如下所示:
filtered_sdf = sdf.filter(
spark_fns.col("String").contains("JFK") | spark_fns.col("String").contains("ABC")
)
Run Code Online (Sandbox Code Playgroud)
或者
filtered_sdf = sdf.filter(
spark_fns.col("String").contains("ABC")
)
Run Code Online (Sandbox Code Playgroud)
理想情况下,该.contains()部分是包含 1+ 个子字符串的预设参数。
有谁知道最好的方法是什么?或者其他方法?
我尝试过使用.isin(substring_list),但它不起作用,因为我们正在搜索子字符串的存在。
我有两列是 datetime64[ns] 对象。我正在尝试确定它们之间的月数。
这些列是:
city_clean['last_trip_date']
city_clean['signup_date']
Run Code Online (Sandbox Code Playgroud)
格式为 YYYY-MM-DD
我试过
from dateutil.relativedelta import relativedelta
city_clean['months_active'] = relativedelta(city_clean['signup_date'], city_clean['last_trip_date'])
Run Code Online (Sandbox Code Playgroud)
并得到以下错误:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
Run Code Online (Sandbox Code Playgroud)
有谁知道什么可能导致这个问题?我觉得这是计算月份数最准确的方法。
我正在尝试根据 A、B、C、D 中存在的值添加一列“flag_column”。
即如果 A/B/C/DI 中有一个值想创建一个新列,'flag' 表示包含一个值的列名。
A B C D counts flag
0 1 0 0 0 1 A
1 0 1 0 0 1 B
2 1 0 0 0 1 A
3 0 0 1 0 1 C
4 0 1 0 0 1 B
Run Code Online (Sandbox Code Playgroud)
注意:只有一列(A 到 D)包含值,因此计数始终为 1。
我试过了:
if [df['A'] == 1] == True:
df['flag'] = 'A'
elif [df['B'] == 1] == True:
df['flag'] = 'B'
elif [df['C'] == 1] == True:
df['flag'] = 'C' …Run Code Online (Sandbox Code Playgroud)