我已将一个excel文件导入到pandas数据框中,并已完成数据浏览和清理过程。
我现在想将已清理的数据帧写到csv文件中,再回到Azure DataLake,而不必先将其保存为本地文件。我正在使用熊猫3。
我的代码如下所示:
token = lib.auth(tenant_id = '',
client_secret ='',
client_id = '')
adl = core.AzureDLFileSystem(token, store_name)
with adl.open(path='Raw/Gold/Myfile.csv', mode='wb') as f:
**in_xls.to_csv(f, encoding='utf-8')**
f.close()
Run Code Online (Sandbox Code Playgroud)
我在粗体语句中得到以下转储。
TypeError:需要一个类似字节的对象,而不是'str'
我也尝试过但没有运气
with adl.open(path='Raw/Gold/Myfile.csv', mode='wb') as f:
with io.BytesIO(in_xls) as byte_buf:
byte_buf.to_csv(f, encoding='utf-8')
f.close()
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
TypeError:需要一个类似字节的对象,而不是“ DataFrame”
任何想法/技巧将不胜感激
我有一个如下所示的数据框:
+------------------------+----------+
|Postal code |PostalCode|
+------------------------+----------+
|Muxía |null |
|Fuensanta |null |
|Salobre |null |
|Bolulla |null |
|33004 |null |
|Santa Eulàlia de Ronçana|null |
|Cabañes de Esgueva |null |
|Vallarta de Bureba |null |
|Villaverde del Monte |null |
|Villaluenga del Rosario |null |
+------------------------+----------+
Run Code Online (Sandbox Code Playgroud)
如果邮政编码列仅包含数字,我想创建一个只存储数字邮政编码的新列.如果邮政编码列仅包含文本,则需要创建名为"Municipality"的新列.
我尝试使用'isnan'作为我的理解,这将检查一个值是否不是一个数字,但这似乎不起作用.列类型应该是字符串,以使其工作或?
到目前为止,我的尝试是:
> df2 = df.withColumn('PostalCode', when(isnan(df['Postal code']), df['Postal code'])
Run Code Online (Sandbox Code Playgroud)
查看上面发布的数据框结果示例,您可以看到为新列返回所有值'Null',也为邮政编码'33004'返回
任何想法将不胜感激
我有一个模拟到如下所示数据框的场景。
Area Type NrPeople
1 House 200
1 Flat 100
2 House 300
2 Flat 400
3 House 1000
4 Flat 250
Run Code Online (Sandbox Code Playgroud)
如何想按降序计算和返回每个区域的人的Nr,但最重要的是我很难计算总百分比。
结果应如下所示:
Area SumPeople %
3 1000 44%
2 700 31%
1 300 13%
4 250 11%
Run Code Online (Sandbox Code Playgroud)
请参见下面的代码示例:
HouseDf = spark.createDataFrame([("1", "House", "200"),
("1", "Flat", "100"),
("2", "House", "300"),
("2", "Flat", "400"),
("3", "House", "1000"),
("4", "Flat", "250")],
["Area", "Type", "NrPeople"])
import pyspark.sql.functions as fn
Total = HouseDf.agg(fn.sum('NrPeople').alias('Total'))
Top = HouseDf\
.groupBy('Area')\
.agg(fn.sum('NrPeople').alias('SumPeople'))\
.orderBy('SumPeople', ascending=False)\
.withColumn('%', fn.lit(HouseDf.agg(fn.sum('NrPeople'))/Total.Total))\
Top.show() …Run Code Online (Sandbox Code Playgroud)